|
Packit |
62fe53 |
#!/bin/bash
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# sum2junit.sh -- convert a .sum file into Junit-compatible XML.
|
|
Packit |
62fe53 |
#
|
|
Packit |
62fe53 |
# Copyright (C) 2016 Free Software Foundation, Inc.
|
|
Packit |
62fe53 |
#
|
|
Packit |
62fe53 |
# This file is part of DejaGnu.
|
|
Packit |
62fe53 |
#
|
|
Packit |
62fe53 |
# DejaGnu is free software; you can redistribute it and/or modify it
|
|
Packit |
62fe53 |
# under the terms of the GNU General Public License as published by
|
|
Packit |
62fe53 |
# the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
62fe53 |
# (at your option) any later version.
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
if test x"$1" = x; then
|
|
Packit |
62fe53 |
outfile="/tmp/testrun.xml"
|
|
Packit |
62fe53 |
infile="/tmp/testrun.sum"
|
|
Packit |
62fe53 |
else
|
|
Packit |
62fe53 |
outfile=${1//\.sum.*/.xml}
|
|
Packit |
62fe53 |
infile=$1
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# Where to put the output file
|
|
Packit |
62fe53 |
if test x"$2" = x; then
|
|
Packit |
62fe53 |
outfile=${outfile}
|
|
Packit |
62fe53 |
else
|
|
Packit |
62fe53 |
outfile="/tmp/${outfile}"
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
if test ! -e "$infile"; then
|
|
Packit |
62fe53 |
echo "ERROR: no input file specified"
|
|
Packit |
62fe53 |
exit
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
tool=$(grep "tests ===" "$infile" | tr -s ' ' | cut -d ' ' -f 2)
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# Get the counts for tests that didn't work properly
|
|
Packit |
62fe53 |
skipped=$(egrep -c '^UNRESOLVED|^UNTESTED|^UNSUPPORTED' "$infile")
|
|
Packit |
62fe53 |
if test x"${skipped}" = x; then
|
|
Packit |
62fe53 |
skipped=0
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# The total of successful results are PASS and XFAIL
|
|
Packit |
62fe53 |
passes=$(egrep -c '^PASS|XFAIL' "$infile")
|
|
Packit |
62fe53 |
if test x"${passes}" = x; then
|
|
Packit |
62fe53 |
passes=0
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# The total of failed results are FAIL and XPASS
|
|
Packit |
62fe53 |
failures=$(egrep -c '^XFAIL|XPASS' "$infile")
|
|
Packit |
62fe53 |
if test x"${failures}" = x; then
|
|
Packit |
62fe53 |
failures=0
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# Calculate the total number of test cases
|
|
Packit |
62fe53 |
total=$((passes + failures))
|
|
Packit |
62fe53 |
total=$((total + skipped))
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
cat <<EOF > ${outfile}
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
<testsuites>
|
|
Packit |
62fe53 |
<testsuite name="DejaGnu" tests="${total}" failures="${failures}" skipped="${skipped}">
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
EOF
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# Reduce the size of the file to be parsed to improve performance. Junit
|
|
Packit |
62fe53 |
# ignores sucessful test results, so we only grab the failures and test
|
|
Packit |
62fe53 |
# case problem results.
|
|
Packit |
62fe53 |
tmpfile="${infile}.tmp"
|
|
Packit |
62fe53 |
rm -f "$tmpfile"
|
|
Packit |
62fe53 |
egrep 'XPASS|FAIL|UNTESTED|UNSUPPORTED|UNRESOLVED' "$infile" > "$tmpfile"
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
while read line
|
|
Packit |
62fe53 |
do
|
|
Packit |
62fe53 |
echo -n "."
|
|
Packit |
62fe53 |
result=$(echo "$line" | cut -d ' ' -f 1 | tr -d ':')
|
|
Packit |
62fe53 |
name=$(echo "$line" | cut -d ' ' -f 2)
|
|
Packit |
62fe53 |
message=$(echo "$line" | cut -d ' ' -f 3-50 | tr -d '\"><;:\[\]^\\&?@')
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
echo " <testcase name=\"${name}\" classname=\"${tool}-${result}\">" >> "$outfile"
|
|
Packit |
62fe53 |
case "${result}" in
|
|
Packit |
62fe53 |
UNSUPPORTED|UNTESTED|UNRESOLVED)
|
|
Packit |
62fe53 |
if test x"${message}" != x; then
|
|
Packit |
62fe53 |
echo -n " <skipped message=\"${message}" >> "$outfile"
|
|
Packit |
62fe53 |
else
|
|
Packit |
62fe53 |
echo -n " <skipped type=\"$result" >> "$outfile"
|
|
Packit |
62fe53 |
fi
|
|
Packit |
62fe53 |
;;
|
|
Packit |
62fe53 |
XPASS|XFAIL)
|
|
Packit |
62fe53 |
echo -n " <failure message=\"$message" >> "$outfile"
|
|
Packit |
62fe53 |
;;
|
|
Packit |
62fe53 |
*)
|
|
Packit |
62fe53 |
echo -n " <failure message=\"$message" >> "$outfile"
|
|
Packit |
62fe53 |
esac
|
|
Packit |
62fe53 |
echo "\"/>" >> "$outfile"
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
echo " </testcase>" >> "$outfile"
|
|
Packit |
62fe53 |
done < "$tmpfile"
|
|
Packit |
62fe53 |
rm -f "$tmpfile"
|
|
Packit |
62fe53 |
|
|
Packit |
62fe53 |
# Write the closing tag for the test results
|
|
Packit |
62fe53 |
echo "</testsuite>" >> "$outfile"
|
|
Packit |
62fe53 |
echo "</testsuites>" >> "$outfile"
|