blob: 73d1a5c69d4adfe60b667b3d0e0d5cb3822240fc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
|
#!/bin/sh
##
## Test driver script
##
usage() {
echo "Usage: $0 [opts] <report>"
echo " Where report is a name that will be used for report files"
echo ""
echo " Where opts are:"
echo " -d : do not submit a report for this run"
echo " -b : do not ask any questions (batch mode)"
echo " -g <group> : run a group test set"
echo " available goups are:"
echo " "`ls grouptest`
echo " -e <email> : set email address for report"
echo " -r <url> : url of test results repository to use"
echo " -s <report> : just submit report <report>"
echo " -u : unsafe -- do not run the sanity checks before starting"
echo " -md : all created domains are xend-'managed' domains"
echo " -h | --help : show this help"
}
# Just submit the report
submit_report() {
reportfile=$1
./lib/XmTestReport/Report.py $reportserver $reportfile
}
# Generate XML result report from output file
make_result_report() {
output=$1
reportfile=$2
if ! ./lib/XmTestReport/ResultReport.py $output > $reportfile; then
echo "Unable to generate clean ResultReport"
echo "Take a look at $report"
exit 1
fi
}
# Collect environment information for XML report
make_environment_report() {
os=$1
prog=$2
if ! ./lib/XmTestReport/OSReport.py > $os; then
echo "Unable to generate clean OSReport"
echo "Take a look at $os"
exit 1
fi
if ! ./lib/XmTestReport/ProgReport.py > $prog; then
echo "Unable to generate clean ProgReport"
echo "Take a look at $prog"
exit 1
fi
}
# Check conditions needed to actually run the tests
runnable_tests() {
# Make sure we're root
uid=$(id -u)
if [ $uid != 0 ]; then
echo "ERROR: I must be run as root!"
exit 1
fi
# See if the ramdisk has been built
rdsize=$(stat -Lc %s ramdisk/initrd.img 2>/dev/null)
if [ -z "$rdsize" ] || [ $rdsize -le 16384 ]; then
echo "Cannot find a valid ramdisk. You need to run \"make\" or"
echo "copy in a previously-built ramdisk to the ramdisk/ directory"
exit 1
fi
# Figure out the version of the ramdisk link and compare it
# to what it should be as a cheap way of making sure we're
# using the right version
realrd=$(readlink ramdisk/initrd.img)
eval $(./lib/XmTestReport/xmtest.py)
ARCH=$(uname -m | sed -e s/i.86/i386/)
rrdver="initrd-${XM_TEST_MAJ}.${XM_TEST_MIN}-${ARCH}.img"
exp_flag=0
realarch=`echo $realrd | awk -F- '{print $3}' | awk -F. '{print $1}'`
rrdarch=`echo $rrdver | awk -F- '{print $3}' | awk -F. '{print $1}'`
if [ "$realarch" = "i386" -a "$rrdarch" = "x86_64" ]; then
exp_flag=1
fi
if [ $exp_flag -eq 0 -a "$realrd" != "$rrdver" ]; then
echo "Error: ramdisk/initrd.img is from an old version, or is not for this "
echo "architecture ($ARCH)."
echo "You need to build a ramdisk from at least ${XM_TEST_MAJ}.${XM_TEST_MIN}"
#exit 1
fi
# See if xend is running
if ! xm list >/dev/null 2>&1; then
echo "'xm list' failed: is xend running?"
exit 1
fi
# Run a few sample tests to make sure things are working
# before we take the plunge
echo "Running sanity checks..."
make -C tests/_sanity check 2>&1 | grep REASON
if [ $? -eq 0 ]; then
echo "Sanity checks failed"
exit 1
fi
}
# Get contact info if needed
get_contact_info() {
if [ ! -f contact_info ]; then
if [ "$batch" = "yes" ]; then
echo "Unable to read contact_info!"
echo "Please run me once interactively before using batch mode!"
exit 1
else
echo "Please provide your email address so that we can "
echo "contact you if we need further information concerning"
echo "your results. Any information provided will be"
echo "kept private. If you wish to remain anonymous, please"
echo "hit [ENTER] now."
while ! echo "$EMAIL" | grep -q '@'; do
echo
echo -n "Your email address: "
read EMAIL
if [ -z $EMAIL ]; then
EMAIL="anonymous@somewhere.com"
fi
done
echo $EMAIL > contact_info
fi
fi
}
# Run the tests
run_tests() {
groupentered=$1
output=$2
report=$3
startfile=${report}.start
stopfile=${report}.stop
date -R > $startfile
exec < grouptest/$groupentered
while read casename testlist; do
echo Running $casename tests...
echo "*** case $casename from group $groupentered" >> $output
if [ -z "$testlist" ]; then
echo "*** Running tests for case $casename" >> $output
(cd tests/$casename && TEST_VERBOSE=1 make -k check) >> $output 2>&1
else
echo "*** Running tests $testlist from case $casename" >> $output
(cd tests/$casename && TEST_VERBOSE=1 make -k check TESTS="$testlist") >> $output 2>&1
fi
done
date -R > $stopfile
}
# Generate some plain-text reports
make_text_reports() {
passfail=$1
failures=$2
output=$3
reportfile=$4
report=$5
summary=summary.tmp
startfile=${report}.start
stopfile=${report}.stop
echo "Making PASS/FAIL report ($passfail)..."
cat $OUTPUT | egrep '(REASON|PASS|FAIL|XPASS|XFAIL|SKIP)' | perl -pe 's/^(PASS|FAIL|XPASS|XFAIL)(.+)$/$1$2\n/' > $passfail
echo "Making FAIL report ($failures)..."
cat $passfail | egrep '(REASON|FAIL)' > $failures
NUMPASS=`grep -c PASS $output`
NUMFAIL=`grep -c FAIL $output`
NUMXPASS=`grep -c XPASS $output`
NUMXFAIL=`grep -c XFAIL $output`
START=`cat $startfile`
STOP=`cat $stopfile`
cat > $summary << EOF
Xm-test timing summary:
Run Started : $START
Run Stoped : $STOP
Xm-test execution summary:
PASS: $NUMPASS
FAIL: $NUMFAIL
XPASS: $NUMXPASS
XFAIL: $NUMXFAIL
EOF
cat $summary > $reportfile
echo -e '\n\nDetails:\n' >> $reportfile
./mkreport $passfail >> $reportfile
rm $summary
}
############
### Main ###
############
# Defaults
MAXFAIL=10
report=yes
reportserver=${xmtest_repo:-'http://xmtest.dague.org/cgi-bin/report-results'}
batch=no
run=yes
unsafe=no
GROUPENTERED=default
unset XM_MANAGED_DOMAINS
# Resolve options
while [ $# -gt 0 ]
do
case "$1" in
-d)
echo "(Skipping report submission)"
report=no
;;
-b)
echo "(Batch mode)"
batch=yes
;;
-e)
shift
echo $1 > contact_info
echo "(Email set to $1)"
;;
-g)
shift
GROUPENTERED=$1
if [ ! -f grouptest/$GROUPENTERED ]; then
echo "No file for group $GROUPENTERED"
exit 1
fi
;;
-r)
shift
reportserver=$1
;;
-s)
run=no
;;
-u)
echo "(Unsafe mode)"
unsafe=yes
report=no
;;
-md)
echo "(use managed domains)"
export XM_MANAGED_DOMAINS=1
;;
-h|--help)
usage
exit 0
;;
*)
REPORT=$1
break
;;
esac
shift
done
# Usage
if [ -z $REPORT ]; then
usage
exit 1
fi
# Output files
OSREPORTTEMP=${REPORT}.os.xml
PROGREPORTTEMP=${REPORT}.prog.xml
RESULTREPORTTEMP=${REPORT}.result.xml
XMLREPORT=${REPORT}.xml
OUTPUT=${REPORT}.output
SUMMARY=${REPORT}.summary
PASSFAIL=${REPORT}.passfail
TXTREPORT=${REPORT}.report
FAILURES=${REPORT}.failures
# Make sure permissions are correct
chmod a+x lib/XmTestReport/*
chmod a+x mkreport mergereport
if [ ! -f contact_info ]; then
if [ "$batch" = "yes" ]; then
echo "Unable to read contact_info"
echo "You must run me interactively once!"
exit 1
else
get_contact_info
fi
fi
if [ "$GROUPENTERED" != "default" ]; then
report=no;
fi
if [ "$run" != "no" ]; then
if [ "$unsafe" = "no" ]; then
runnable_tests
fi
rm -f $REPORT"*"
if [ "$unsafe" = "no" ]; then
make_environment_report $OSREPORTTEMP $PROGREPORTTEMP
fi
run_tests $GROUPENTERED $OUTPUT $REPORT
make_text_reports $PASSFAIL $FAILURES $OUTPUT $TXTREPORT $REPORT
if [ "$unsafe" = "no" ]; then
make_result_report $OUTPUT $RESULTREPORTTEMP
cat $OSREPORTTEMP $PROGREPORTTEMP $RESULTREPORTTEMP > $XMLREPORT
rm $OSREPORTTEMP $PROGREPORTTEMP $RESULTREPORTTEMP
fi
fi
if [ "$report" = "yes" ]; then
if [ ! -f "$XMLREPORT" ]; then
echo "No such file: $XMLREPORT"
exit 1
fi
submit_report $XMLREPORT
fi
|