]> git.proxmox.com Git - qemu.git/blob - tests/qemu-iotests/common
target-i386: move tcg initialization into x86_cpu_initfn()
[qemu.git] / tests / qemu-iotests / common
1 #!/bin/bash
2 #
3 # Copyright (C) 2009 Red Hat, Inc.
4 # Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
5 #
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation.
9 #
10 # This program is distributed in the hope that it would be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 #
18 #
19 # common procedures for QA scripts
20 #
21
22 _setenvironment()
23 {
24 MSGVERB="text:action"
25 export MSGVERB
26 }
27
28 here=`pwd`
29 rm -f $here/$iam.out
30 _setenvironment
31
32 check=${check-true}
33
34 diff="diff -u"
35 verbose=false
36 group=false
37 xgroup=false
38 imgopts=false
39 showme=false
40 sortme=false
41 expunge=true
42 have_test_arg=false
43 randomize=false
44 rm -f $tmp.list $tmp.tmp $tmp.sed
45
46 export IMGFMT=raw
47 export IMGPROTO=file
48 export IMGOPTS=""
49 export QEMU_IO_OPTIONS=""
50
51 for r
52 do
53
54 if $group
55 then
56 # arg after -g
57 group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
58 s/ .*//p
59 }'`
60 if [ -z "$group_list" ]
61 then
62 echo "Group \"$r\" is empty or not defined?"
63 exit 1
64 fi
65 [ ! -s $tmp.list ] && touch $tmp.list
66 for t in $group_list
67 do
68 if grep -s "^$t\$" $tmp.list >/dev/null
69 then
70 :
71 else
72 echo "$t" >>$tmp.list
73 fi
74 done
75 group=false
76 continue
77
78 elif $xgroup
79 then
80 # arg after -x
81 [ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] >$tmp.list 2>/dev/null
82 group_list=`sed -n <group -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
83 s/ .*//p
84 }'`
85 if [ -z "$group_list" ]
86 then
87 echo "Group \"$r\" is empty or not defined?"
88 exit 1
89 fi
90 numsed=0
91 rm -f $tmp.sed
92 for t in $group_list
93 do
94 if [ $numsed -gt 100 ]
95 then
96 sed -f $tmp.sed <$tmp.list >$tmp.tmp
97 mv $tmp.tmp $tmp.list
98 numsed=0
99 rm -f $tmp.sed
100 fi
101 echo "/^$t\$/d" >>$tmp.sed
102 numsed=`expr $numsed + 1`
103 done
104 sed -f $tmp.sed <$tmp.list >$tmp.tmp
105 mv $tmp.tmp $tmp.list
106 xgroup=false
107 continue
108
109 elif $imgopts
110 then
111 IMGOPTS="$r"
112 imgopts=false
113 continue
114
115 fi
116
117 xpand=true
118 case "$r"
119 in
120
121 -\? | -h | --help) # usage
122 echo "Usage: $0 [options] [testlist]"'
123
124 common options
125 -v verbose
126
127 check options
128 -raw test raw (default)
129 -cow test cow
130 -qcow test qcow
131 -qcow2 test qcow2
132 -qed test qed
133 -vdi test vdi
134 -vpc test vpc
135 -vmdk test vmdk
136 -rbd test rbd
137 -sheepdog test sheepdog
138 -xdiff graphical mode diff
139 -nocache use O_DIRECT on backing file
140 -misalign misalign memory allocations
141 -n show me, do not run tests
142 -o options -o options to pass to qemu-img create/convert
143 -T output timestamps
144 -r randomize test order
145
146 testlist options
147 -g group[,group...] include tests from these groups
148 -x group[,group...] exclude tests from these groups
149 NNN include test NNN
150 NNN-NNN include test range (eg. 012-021)
151 '
152 exit 0
153 ;;
154
155 -raw)
156 IMGFMT=raw
157 xpand=false
158 ;;
159
160 -cow)
161 IMGFMT=cow
162 xpand=false
163 ;;
164
165 -qcow)
166 IMGFMT=qcow
167 xpand=false
168 ;;
169
170 -qcow2)
171 IMGFMT=qcow2
172 xpand=false
173 ;;
174
175 -qed)
176 IMGFMT=qed
177 xpand=false
178 ;;
179
180 -vdi)
181 IMGFMT=vdi
182 xpand=false
183 ;;
184
185 -vmdk)
186 IMGFMT=vmdk
187 xpand=false
188 ;;
189
190 -vpc)
191 IMGFMT=vpc
192 xpand=false
193 ;;
194
195 -rbd)
196 IMGPROTO=rbd
197 xpand=false
198 ;;
199
200 -sheepdog)
201 IMGPROTO=sheepdog
202 xpand=false
203 ;;
204
205 -nocache)
206 QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
207 xpand=false
208 ;;
209
210 -misalign)
211 QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign"
212 xpand=false
213 ;;
214
215 -g) # -g group ... pick from group file
216 group=true
217 xpand=false
218 ;;
219
220 -xdiff) # graphical diff mode
221 xpand=false
222
223 if [ ! -z "$DISPLAY" ]
224 then
225 which xdiff >/dev/null 2>&1 && diff=xdiff
226 which gdiff >/dev/null 2>&1 && diff=gdiff
227 which tkdiff >/dev/null 2>&1 && diff=tkdiff
228 which xxdiff >/dev/null 2>&1 && diff=xxdiff
229 fi
230 ;;
231
232 -n) # show me, don't do it
233 showme=true
234 xpand=false
235 ;;
236 -o)
237 imgopts=true
238 xpand=false
239 ;;
240 -r) # randomize test order
241 randomize=true
242 xpand=false
243 ;;
244
245 -T) # turn on timestamp output
246 timestamp=true
247 xpand=false
248 ;;
249
250 -v)
251 verbose=true
252 xpand=false
253 ;;
254 -x) # -x group ... exclude from group file
255 xgroup=true
256 xpand=false
257 ;;
258 '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
259 echo "No tests?"
260 status=1
261 exit $status
262 ;;
263
264 [0-9]*-[0-9]*)
265 eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'`
266 ;;
267
268 [0-9]*-)
269 eval `echo $r | sed -e 's/^/start=/' -e 's/-//'`
270 end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'`
271 if [ -z "$end" ]
272 then
273 echo "No tests in range \"$r\"?"
274 status=1
275 exit $status
276 fi
277 ;;
278
279 *)
280 start=$r
281 end=$r
282 ;;
283
284 esac
285
286 # get rid of leading 0s as can be interpreted as octal
287 start=`echo $start | sed 's/^0*//'`
288 end=`echo $end | sed 's/^0*//'`
289
290 if $xpand
291 then
292 have_test_arg=true
293 $AWK_PROG </dev/null '
294 BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
295 | while read id
296 do
297 if grep -s "^$id " group >/dev/null
298 then
299 # in group file ... OK
300 echo $id >>$tmp.list
301 else
302 if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null
303 then
304 # expunged ... will be reported, but not run, later
305 echo $id >>$tmp.list
306 else
307 # oops
308 echo "$id - unknown test, ignored"
309 fi
310 fi
311 done
312 fi
313
314 done
315
316 # Set default options for qemu-img create -o if they were not specified
317 _set_default_imgopts
318
319 if [ -s $tmp.list ]
320 then
321 # found some valid test numbers ... this is good
322 :
323 else
324 if $have_test_arg
325 then
326 # had test numbers, but none in group file ... do nothing
327 touch $tmp.list
328 else
329 # no test numbers, do everything from group file
330 sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <group >$tmp.list
331 fi
332 fi
333
334 # should be sort -n, but this did not work for Linux when this
335 # was ported from IRIX
336 #
337 list=`sort $tmp.list`
338 rm -f $tmp.list $tmp.tmp $tmp.sed
339
340 if $randomize
341 then
342 list=`echo $list | awk -f randomize.awk`
343 fi
344
345 [ "$QEMU" = "" ] && _fatal "qemu not found"
346 [ "$QEMU_IMG" = "" ] && _fatal "qemu-img not found"
347 [ "$QEMU_IO" = "" ] && _fatal "qemu-img not found"