Blame contrib/sum2junit.sh

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"