Annotation of /trunk/grubby/test-bls.sh
Parent Directory | Revision Log
Revision 3169 -
(hide annotations)
(download)
(as text)
Thu Jul 27 14:27:01 2023 UTC (10 months, 1 week ago) by niro
File MIME type: application/x-sh
File size: 10070 byte(s)
Thu Jul 27 14:27:01 2023 UTC (10 months, 1 week ago) by niro
File MIME type: application/x-sh
File size: 10070 byte(s)
Add grubby-bls script (#35) - 2018-06-18
1 | niro | 3169 | #!/bin/bash |
2 | # | ||
3 | # test.sh -- grubby wrapper regression tests | ||
4 | # | ||
5 | # Copyright 2007-2018 Red Hat, Inc. All rights reserved. | ||
6 | # | ||
7 | # This program is free software; you can redistribute it and/or modify | ||
8 | # it under the terms of the GNU General Public License as published by | ||
9 | # the Free Software Foundation; either version 2 of the License, or | ||
10 | # (at your option) any later version. | ||
11 | # | ||
12 | # This program is distributed in the hope that it will be useful, | ||
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | # GNU General Public License for more details. | ||
16 | # | ||
17 | # You should have received a copy of the GNU General Public License | ||
18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
19 | # | ||
20 | |||
21 | #---------------------------------------------------------------------- | ||
22 | # Global vars | ||
23 | #---------------------------------------------------------------------- | ||
24 | |||
25 | cmd=${0##*/} | ||
26 | opt_bootloader=* | ||
27 | opt_verbose=false | ||
28 | read -d '' usage <<EOT | ||
29 | usage: test.sh [ -hv ] | ||
30 | |||
31 | -b B --bootloader=B Test bootloader B instead of all | ||
32 | -h --help Show this help message | ||
33 | -v --verbose Verbose output | ||
34 | EOT | ||
35 | declare -i pass=0 fail=0 | ||
36 | testing= | ||
37 | |||
38 | BLSDIR=$(mktemp -d) | ||
39 | |||
40 | #---------------------------------------------------------------------- | ||
41 | # Functions | ||
42 | #---------------------------------------------------------------------- | ||
43 | |||
44 | empty_blsdir() { | ||
45 | rm -rf $BLSDIR/* | ||
46 | } | ||
47 | |||
48 | oneTest() { | ||
49 | typeset mode=$1 correct=test/bls/results/$2 | ||
50 | shift 2 | ||
51 | |||
52 | local ENV_FILE="" | ||
53 | if [ "$mode" == "--grub2" ]; then | ||
54 | ENV_FILE="test/bls/grub2-support_files/env_temp" | ||
55 | if [ ! -f $ENV_FILE ]; then | ||
56 | cp "test/bls/grub2-support_files/grubenv" "$ENV_FILE" | ||
57 | fi | ||
58 | ENV_FILE="--env=$ENV_FILE" | ||
59 | fi | ||
60 | |||
61 | local CFG_FILE="" | ||
62 | if [ "$mode" == "--zipl" ]; then | ||
63 | CFG_FILE=$BLSDIR/cfg_temp | ||
64 | if [ ! -f $CFG_FILE ]; then | ||
65 | cp "test/bls/zipl-support_files/zipl.conf" "$CFG_FILE" | ||
66 | fi | ||
67 | CFG_FILE="--config-file=$CFG_FILE" | ||
68 | fi | ||
69 | |||
70 | echo "$testing ... $mode $correct" | ||
71 | runme=( ./grubby-bls "$mode" --bad-image-okay $ENV_FILE $CFG_FILE -b $BLSDIR "$@" ) | ||
72 | runtest=( ./grubby-bls "$mode" --info=ALL $ENV_FILE $CFG_FILE -b $BLSDIR) | ||
73 | if "${runme[@]}" && "${runtest[@]}" | cmp "$correct" > /dev/null; then | ||
74 | (( pass++ )) | ||
75 | if $opt_verbose; then | ||
76 | echo ------------------------------------------------------------- | ||
77 | echo -n "PASS: " | ||
78 | printf "%q " "${runme[@]}"; echo | ||
79 | "${runtest[@]}" | diff -U30 "$correct" - | ||
80 | echo | ||
81 | fi | ||
82 | else | ||
83 | (( fail++ )) | ||
84 | echo ------------------------------------------------------------- | ||
85 | echo -n "FAIL: " | ||
86 | printf "%q " "${runme[@]}"; echo | ||
87 | "${runtest[@]}" | diff -U30 "$correct" - | ||
88 | echo | ||
89 | fi | ||
90 | } | ||
91 | |||
92 | # Test feature that display some information, checking that output instead of | ||
93 | # the generated configuration file | ||
94 | oneDisplayTest() { | ||
95 | typeset mode=$1 correct=test/bls/results/$2 | ||
96 | shift 2 | ||
97 | |||
98 | local ENV_FILE="" | ||
99 | if [ "$mode" == "--grub2" ]; then | ||
100 | ENV_FILE="test/bls/grub2-support_files/env_temp" | ||
101 | if [ ! -f $ENV_FILE ]; then | ||
102 | cp "test/bls/grub2-support_files/grubenv" "$ENV_FILE" | ||
103 | fi | ||
104 | ENV_FILE="--env=$ENV_FILE" | ||
105 | fi | ||
106 | |||
107 | local CFG_FILE="" | ||
108 | if [ "$mode" == "--zipl" ]; then | ||
109 | CFG_FILE=$BLSDIR/cfg_temp | ||
110 | if [ ! -f $CFG_FILE ]; then | ||
111 | cp "test/bls/zipl-support_files/zipl.conf" "$CFG_FILE" | ||
112 | fi | ||
113 | CFG_FILE="--config-file=$CFG_FILE" | ||
114 | fi | ||
115 | |||
116 | local BIO="--bad-image-okay" | ||
117 | if [ "$1" == "--bad-image-bad" ]; then | ||
118 | BIO="" | ||
119 | shift | ||
120 | fi | ||
121 | |||
122 | echo "$testing ... $mode $correct" | ||
123 | runme=( ./grubby-bls "$mode" $BIO $ENV_FILE $CFG_FILE -b $BLSDIR "$@" ) | ||
124 | if "${runme[@]}" 2>&1 | cmp "$correct" > /dev/null; then | ||
125 | (( pass++ )) | ||
126 | if $opt_verbose; then | ||
127 | echo ------------------------------------------------------------- | ||
128 | echo -n "PASS: " | ||
129 | printf "%q " "${runme[@]}"; echo | ||
130 | "${runme[@]}" 2>&1 | diff -U30 "$correct" - | ||
131 | echo | ||
132 | fi | ||
133 | else | ||
134 | (( fail++ )) | ||
135 | echo ------------------------------------------------------------- | ||
136 | echo -n "FAIL: " | ||
137 | printf "%q " "${runme[@]}"; echo | ||
138 | "${runme[@]}" 2>&1 | diff -U30 "$correct" - | ||
139 | echo | ||
140 | fi | ||
141 | } | ||
142 | |||
143 | commandTest() { | ||
144 | description=$1 | ||
145 | cmd0=$2 | ||
146 | text1=$3 | ||
147 | shift 3 | ||
148 | echo "$description" | ||
149 | output0=$(mktemp) | ||
150 | |||
151 | $cmd0 > $output0 | ||
152 | |||
153 | if echo $text1 | cmp $output0 - >/dev/null; then | ||
154 | (( pass++)) | ||
155 | if $opt_verbose; then | ||
156 | echo ------------------------------------------------------------- | ||
157 | echo -n "PASS: " | ||
158 | printf "%q " "\"$cmd0\""; echo | ||
159 | echo $text1 | diff -U30 $output0 - | ||
160 | echo | ||
161 | fi | ||
162 | else | ||
163 | (( fail++ )) | ||
164 | echo ------------------------------------------------------------- | ||
165 | echo -n "FAIL: " | ||
166 | printf "%q " "\"$cmd0\""; echo | ||
167 | echo $text1 | diff -U30 $output0 - | ||
168 | echo | ||
169 | fi | ||
170 | } | ||
171 | |||
172 | # generate convenience functions | ||
173 | for b in $(./grubby-bls --help | \ | ||
174 | sed -n 's/^.*--\([^ ]*\) *configure \1 bootloader.*/\1/p'); do | ||
175 | eval "${b}Test() { [[ \"$b\" == \$opt_bootloader ]] && oneTest --$b \"\$@\"; }" | ||
176 | eval "${b}DisplayTest() { [[ \"$b\" == \$opt_bootloader ]] && oneDisplayTest --$b \"\$@\"; }" | ||
177 | done | ||
178 | |||
179 | #---------------------------------------------------------------------- | ||
180 | # Main | ||
181 | #---------------------------------------------------------------------- | ||
182 | |||
183 | # Use /usr/bin/getopt which supports GNU-style long options | ||
184 | args=$(getopt -o b:hv --long bootloader,help,verbose -n "$cmd" -- "$@") || exit | ||
185 | eval set -- "$args" | ||
186 | while true; do | ||
187 | case $1 in | ||
188 | -b|--bootloader) opt_bootloader=$2; shift 2 ;; | ||
189 | -h|--help) echo "$usage"; exit 0 ;; | ||
190 | -v|--verbose) opt_verbose=true; shift ;; | ||
191 | --) shift; break ;; | ||
192 | *) echo "failed to process cmdline args" >&2; exit 1 ;; | ||
193 | esac | ||
194 | done | ||
195 | |||
196 | empty_blsdir | ||
197 | |||
198 | testing="Z/IPL default directive" | ||
199 | ziplTest add/z1.1 --add-kernel /boot/new-kernel0 --title "title 0" | ||
200 | ziplTest add/z1.2 --add-kernel /boot/new-kernel1 --title "title 1" --make-default | ||
201 | |||
202 | testing="Z/IPL display default index" | ||
203 | ziplDisplayTest default/index0 --default-index | ||
204 | |||
205 | testing="Z/IPL default index directive" | ||
206 | ziplTest default/z2 --set-default-index=1 | ||
207 | |||
208 | testing="Z/IPL display default index" | ||
209 | ziplDisplayTest default/index1 --default-index | ||
210 | |||
211 | testing="Z/IPL display default title" | ||
212 | ziplDisplayTest default/title0 --default-title | ||
213 | |||
214 | testing="Z/IPL display default kernel" | ||
215 | ziplDisplayTest default/kernel0 --default-kernel | ||
216 | |||
217 | testing="Z/IPL display entry information" | ||
218 | ziplDisplayTest display/info0 --info=1 | ||
219 | |||
220 | testing="Z/IPL remove kernel" | ||
221 | ziplTest remove/z3.1 --remove-kernel=/boot/new-kernel1 | ||
222 | ziplTest remove/z3.2 --remove-kernel=DEFAULT | ||
223 | |||
224 | testing="Z/IPL add kernel" | ||
225 | ziplTest add/z4.1 --add-kernel=/boot/new-kernel0 --title test --args="foo=bar" | ||
226 | ziplTest add/z4.2 --add-kernel=/boot/new-kernel1 --title test --copy-default --args="x=y" | ||
227 | |||
228 | empty_blsdir | ||
229 | |||
230 | testing="GRUB2 add kernel with title" | ||
231 | grub2Test add/g1 --add-kernel=/boot/new-kernel0 --title='title 0' \ | ||
232 | --initrd=/boot/new-initrd0.img | ||
233 | |||
234 | testing="GRUB2 add kernel with initrd" | ||
235 | grub2Test add/g2 --add-kernel=/boot/new-kernel1 --initrd=/boot/new-initrd1.img \ | ||
236 | --title="title 1" --make-default | ||
237 | |||
238 | testing="GRUB2 add kernel" | ||
239 | grub2Test add/g3 --add-kernel=/boot/new-kernel2 --title "title 2" | ||
240 | |||
241 | testing="GRUB2 remove kernel" | ||
242 | grub2Test remove/g4 --remove-kernel=/boot/new-kernel2 | ||
243 | |||
244 | testing="GRUB2 add kernel with copy default" | ||
245 | grub2Test add/g5 --add-kernel=/boot/new-kernel3.img --title='title 3' \ | ||
246 | --initrd=/boot/new-initrd3.img --copy-default | ||
247 | |||
248 | testing="GRUB2 add kernel with args and ignore remove kernel" | ||
249 | grub2Test add/g6 --add-kernel=/boot/vmlinuz-0-rescue-5a94251776a14678911d4ae0949500f5 \ | ||
250 | --initrd /boot/initramfs-0-rescue-5a94251776a14678911d4ae0949500f5.img \ | ||
251 | --copy-default --title "Fedora 21 Rescue" --args=root=/fooooo \ | ||
252 | --remove-kernel=wtf | ||
253 | |||
254 | testing="GRUB2 add initrd" | ||
255 | grub2Test add/g7 --update-kernel=/boot/new-kernel0 --initrd=/boot/new-initrd | ||
256 | |||
257 | testing="GRUB2 display default index" | ||
258 | grub2DisplayTest default/index1 --default-index | ||
259 | |||
260 | testing="GRUB2 display default title" | ||
261 | grub2DisplayTest default/title1 --default-title | ||
262 | |||
263 | testing="GRUB2 remove kernel via index" | ||
264 | grub2Test remove/g8 --remove-kernel=1 | ||
265 | |||
266 | testing="GRUB2 remove kernel via title" | ||
267 | grub2Test remove/g9 --remove-kernel="TITLE=title 3" | ||
268 | |||
269 | testing="GRUB2 default index directive" | ||
270 | grub2Test default/g10.1 --set-default-index=0 | ||
271 | grub2DisplayTest default/index0 --default-index | ||
272 | grub2Test default/g10.2 --set-default-index=1 | ||
273 | grub2DisplayTest default/index1 --default-index | ||
274 | grub2Test default/g10.3 --set-default-index=9 | ||
275 | grub2DisplayTest default/index1 --default-index | ||
276 | |||
277 | testing="GRUB2 add kernel with default=saved_entry" | ||
278 | grub2Test add/g11 --add-kernel=/boot/new-kernel.img \ | ||
279 | --title='title' --initrd=/boot/new-initrd \ | ||
280 | --copy-default | ||
281 | commandTest "saved_default output" \ | ||
282 | "grub2-editenv test/bls/grub2-support_files/env_temp list" \ | ||
283 | "saved_entry=Fedora 21 Rescue" | ||
284 | |||
285 | testing="GRUB2 add kernel with default=saved_entry and a terrible title" | ||
286 | grub2Test add/g12 --add-kernel=/boot/new-kernel.img \ | ||
287 | --title='Fedora (3.10.3-300.fc19.x86_64) 19 (Schrödinger’s Cat)' \ | ||
288 | --initrd=/boot/new-initrd --copy-default | ||
289 | |||
290 | testing="GRUB2 set default with default=saved_entry and a terrible name" | ||
291 | grub2Test add/g13 --set-default-index=1 | ||
292 | commandTest "saved_default output" \ | ||
293 | "grub2-editenv test/bls/grub2-support_files/env_temp list" \ | ||
294 | 'saved_entry=Fedora (3.10.3-300.fc19.x86_64) 19 (Schrödinger’s Cat)' | ||
295 | |||
296 | testing="GRUB2 set default with default=saved_entry" | ||
297 | grub2Test add/g14 --set-default-index=0 | ||
298 | commandTest "saved_default output" \ | ||
299 | "grub2-editenv test/bls/grub2-support_files/env_temp list" \ | ||
300 | "saved_entry=title 0" | ||
301 | |||
302 | testing="GRUB2 --default-index with default=saved_entry" | ||
303 | grub2DisplayTest default/index0 --default-index | ||
304 | |||
305 | testing="GRUB2 --default-title with default=saved_entry" | ||
306 | grub2DisplayTest default/title0 --default-title | ||
307 | |||
308 | testing="GRUB2 --default-index with default=saved_entry and empty grubenv" | ||
309 | grub2DisplayTest default/index0 --env /dev/null --default-index | ||
310 | |||
311 | printf "\n%d (%d%%) tests passed, %d (%d%%) tests failed\n" \ | ||
312 | $pass $(((100*pass)/(pass+fail))) \ | ||
313 | $fail $(((100*fail)/(pass+fail))) | ||
314 | |||
315 | rm -rf $BLSDIR | ||
316 | |||
317 | exit $(( !!fail )) |
Properties
Name | Value |
---|---|
svn:executable | * |