aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xm-test/runtest.sh
diff options
context:
space:
mode:
authordanms@us.ibm.com <danms@us.ibm.com>2005-11-10 11:48:05 +0100
committerdanms@us.ibm.com <danms@us.ibm.com>2005-11-10 11:48:05 +0100
commitad0262669d7bf70f973bee87707342f5a6f8286f (patch)
tree4539e99e87998007b3ea5e57903a937304a2a3c1 /tools/xm-test/runtest.sh
parent5b72611469515897a030e908606af8e715d1e541 (diff)
downloadxen-ad0262669d7bf70f973bee87707342f5a6f8286f.tar.gz
xen-ad0262669d7bf70f973bee87707342f5a6f8286f.tar.bz2
xen-ad0262669d7bf70f973bee87707342f5a6f8286f.zip
Modularize runtest.sh and add a quick option.
I broke up runtest.sh into functions which makes it easier to alter its behavior. Now, we can easily re-submit a previously-run test report.
Diffstat (limited to 'tools/xm-test/runtest.sh')
-rw-r--r--tools/xm-test/runtest.sh404
1 files changed, 224 insertions, 180 deletions
diff --git a/tools/xm-test/runtest.sh b/tools/xm-test/runtest.sh
index c259fca451..c6a95b4e8b 100644
--- a/tools/xm-test/runtest.sh
+++ b/tools/xm-test/runtest.sh
@@ -1,215 +1,259 @@
#!/bin/sh
-usage() {
- echo "Usage: $0 [opts] <logfile>"
- echo " Where opts are:"
- echo " -d : do not submit a report for this run"
- echo " -b : do not ask any questions (batch mode)"
- echo " -e <email> : set email address for report"
-}
##
## 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 " -q : run a quick test set"
+ echo " -e <email> : set email address for report"
+ echo " -s <report> : just submit report <report>"
+}
+
+# Just submit the report
+submit_report() {
+
+ reportfile=$1
+
+ ./lib/XmTestReport/Report.py $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 -c %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
+
+ # See if xend is running
+ if ! xm list >/dev/null 2>&1; then
+ echo "'xm list' failed: is xend running?"
+ 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() {
+ output=$1
+ echo Running tests...
+ TEST_VERBOSE=1 make -k check > $output 2>&1
+}
+
+run_tests_quick() {
+
+ output=$1
+
+ create_tests="01_create_basic_pos.test 07_create_mem64_pos.test 10_create_fastdestroy.test 14_create_blockroot_pos.test"
+ unpause_tests="01_unpause_basic_pos.test"
+ memset_tests="01_memset_basic_pos.test 03_memset_random_pos.test"
+ help_tests="06_help_allcmds.test"
+ testgroups="create unpause memset help"
+
+ echo "*** Quick test" > $output
+ for group in $testgroups; do
+ eval $(echo list=\$${group}_tests)
+ echo "*** Running tests [$list] from $group"
+ (cd tests/$group && TEST_VERBOSE=1 make -k check TESTS="$list") >> $output 2>&1
+ done
+
+}
+
+# Generate some plain-text reports
+make_text_reports() {
+ passfail=$1
+ failures=$2
+ output=$3
+ reportfile=$4
+ summary=summary.tmp
+ 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`
+ cat > $summary << EOF
+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
batch=no
+run=yes
-#
# 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)"
- ;;
- *)
- LOGFILE=$1
- break
- ;;
- esac
- shift
+ 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)"
+ ;;
+ -q)
+ run=quick
+ ;;
+ -s)
+ run=no
+ ;;
+ *)
+ REPORT=$1
+ break
+ ;;
+ esac
+ shift
done
-#
# Usage
-#
-if [ -z $LOGFILE ]; then
+if [ -z $REPORT ]; then
usage
exit 1
fi
-#
# Output files
-#
-OSREPORTTEMP=${LOGFILE}.os.xml
-PROGREPORTTEMP=${LOGFILE}.prog.xml
-RESULTREPORTTEMP=${LOGFILE}.result.xml
-OUTPUT=${LOGFILE}.output
-SUMMARY=${LOGFILE}.summary
-PASSFAIL=${LOGFILE}.passfail
-REPORT=${LOGFILE}.report
-FAILURES=${LOGFILE}.failures
-
-#
-# 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 -c %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
-
-#
-# See if xend is running
-#
-if ! xm list >/dev/null 2>&1; then
- echo "'xm list' failed: is xend running?"
- exit 1
-fi
-
-#
+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
-#
-# Get contact info if needed
-#
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!"
+ echo "Unable to read contact_info"
+ echo "You must run me interactively once!"
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
+ get_contact_info
fi
fi
-#
-# Collect environment information for XML report
-#
-if ! ./lib/XmTestReport/OSReport.py > $OSREPORTTEMP; then
- echo "Unable to generate clean OSReport"
- echo "Take a look at $OSREPORTTEMP"
- exit 1
-fi
-if ! ./lib/XmTestReport/ProgReport.py > $PROGREPORTTEMP; then
- echo "Unable to generate clean ProgReport"
- echo "Take a look at $PROGREPORTTEMP"
- exit 1
-fi
-
-#
-# Run the tests
-#
-export TEST_VERBOSE=1
-echo Running tests...
-make -k check > $OUTPUT 2>&1
-
-#
-# Generate some plain-text reports
-#
-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`
-cat > $SUMMARY << EOF
-Xm-test execution summary:
- PASS: $NUMPASS
- FAIL: $NUMFAIL
- XPASS: $NUMXPASS
- XFAIL: $NUMXFAIL
-EOF
-
-cat $SUMMARY > $REPORT
-
-echo -e '\n\nDetails:\n' >> $REPORT
-
-./mkreport $PASSFAIL >> $REPORT
-
-#
-# Check to see if it's worth reporting these results
-#
-#if [ "$batch" = "no" ] &&
-# [ "$report" = "yes" ] &&
-# [ $NUMFAIL -gt $MAXFAIL ]; then
-# echo "NOTE: $NUMFAIL tests failed, which may be erroneous. It may"
-# echo "be a good idea to review the report before sending. If you"
-# echo "choose not to submit the report, it will be saved for your review"
-# echo "and later submission."
-# echo
-# echo -n "Submit anyway? [y/n] "
-# read ANSWER
-# if [ "$ANSWER" = "n" ]; then
-# report=no
-# fi
-#fi
-
-#
-# Generate the XML result report
-#
-if ! ./lib/XmTestReport/ResultReport.py $OUTPUT > $RESULTREPORTTEMP; then
- echo "Unable to generate clean ResultReport"
- echo "Take a look at $RESULTREPORTTEMP"
- exit 1
+if [ "$run" != "no" ]; then
+ runnable_tests
+ make_environment_report $OSREPORTTEMP $PROGREPORTTEMP
+ if [ "$run" = "yes" ]; then
+ run_tests $OUTPUT
+ else
+ run_tests_quick $OUTPUT
+ fi
+ make_text_reports $PASSFAIL $FAILURES $OUTPUT $TXTREPORT
+ make_result_report $OUTPUT $RESULTREPORTTEMP
+ cat $OSREPORTTEMP $PROGREPORTTEMP $RESULTREPORTTEMP > $XMLREPORT
+ rm $OSREPORTTEMP $PROGREPORTTEMP $RESULTREPORTTEMP
fi
-#
-# Maybe submit report and save the combined XML file
-#
-if [ "$report" = "yes" ]; then
- echo "Sending report..."
- ./lib/XmTestReport/Report.py -D $OSREPORTTEMP $PROGREPORTTEMP \
- $RESULTREPORTTEMP > $1.xml
- echo "Report also saved in $1.xml"
-else
- echo "Saving report to $1.xml..."
- ./lib/XmTestReport/Report.py -d $OSREPORTTEMP $PROGREPORTTEMP \
- $RESULTREPORTTEMP > $1.xml
+if [ "$report" = "yes" ] && [ "$run" = "yes" ]; then
+ if [ ! -f "$XMLREPORT" ]; then
+ echo "No such file: $XMLREPORT"
+ exit 1
+ fi
+ submit_report $XMLREPORT
fi