blob: 6cac71fc865b7e48bf125e741d21dbeea656bd21 [file] [log] [blame]
#
# Reports generator funcitons lives here
#
# List of xfstests's enviroment variables to include reports
## TODO automate list population inside common/conf
REPORT_ENV_LIST="$REPORT_ENV_LIST SECTION"
REPORT_ENV_LIST="$REPORT_ENV_LIST FSTYP"
REPORT_ENV_LIST="$REPORT_ENV_LIST PLATFORM"
REPORT_ENV_LIST="$REPORT_ENV_LIST MKFS_OPTIONS"
REPORT_ENV_LIST="$REPORT_ENV_LIST MOUNT_OPTIONS"
REPORT_ENV_LIST="$REPORT_ENV_LIST HOST_OPTIONS"
REPORT_ENV_LIST="$REPORT_ENV_LIST CHECK_OPTIONS"
REPORT_ENV_LIST="$REPORT_ENV_LIST XFS_MKFS_OPTIONS"
REPORT_ENV_LIST="$REPORT_ENV_LIST TIME_FACTOR"
REPORT_ENV_LIST="$REPORT_ENV_LIST LOAD_FACTOR"
REPORT_ENV_LIST="$REPORT_ENV_LIST TEST_DIR"
REPORT_ENV_LIST="$REPORT_ENV_LIST TEST_DEV"
REPORT_ENV_LIST="$REPORT_ENV_LIST SCRATCH_DEV"
REPORT_ENV_LIST="$REPORT_ENV_LIST SCRATCH_MNT"
REPORT_ENV_LIST="$REPORT_ENV_LIST OVL_UPPER"
REPORT_ENV_LIST="$REPORT_ENV_LIST OVL_LOWER"
REPORT_ENV_LIST="$REPORT_ENV_LIST OVL_WORK"
encode_xml()
{
cat -v | \
sed -e 's/&/\&/g' \
-e 's/>/\>/g' \
-e 's/</\&lt;/g' \
-e "s/'/\&apos;/g" \
-e 's/"/\&quot;/g'
}
#
# Xunit format report functions
_xunit_add_property()
{
local name="$1"
local value="${!name}"
if [ ! -z "$value" ]; then
echo -e "\t\t<property name=\"$name\" value=\"$value\"/>" >> $REPORT_DIR/result.xml
fi
}
_xunit_make_section_report()
{
# xfstest:section ==> xunit:testsuite
local sect_name=$section
local sect_time=`expr $sect_stop - $sect_start`
local n_total=`expr $n_try + $n_notrun`
if [ $sect_name == '-no-sections-' ]; then
sect_name='global'
fi
local report=$tmp.report.xunit.$sect_name.xml
# Header
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $REPORT_DIR/result.xml
if [ -z "$date_time" ]; then
date_time=$(date +"%F %T")
fi
local dtime=`echo $date_time| tr " " 'T'`
local stats="failures=\"$n_bad\" skipped=\"$n_notrun\" tests=\"$n_total\" time=\"$sect_time\""
local hw_info="hostname=\"$HOST\" timestamp=\"$dtime\" "
echo "<testsuite name=\"xfstests\" $stats $hw_info >" >> $REPORT_DIR/result.xml
# Properties
echo -e "\t<properties>" >> $REPORT_DIR/result.xml
for p in $REPORT_ENV_LIST;do
_xunit_add_property "$p"
done
echo -e "\t</properties>" >> $REPORT_DIR/result.xml
if [ -f $report ]; then
cat $report >> $REPORT_DIR/result.xml
fi
echo "</testsuite>" >> $REPORT_DIR/result.xml
echo "Xunit report: $REPORT_DIR/result.xml"
}
_xunit_make_testcase_report()
{
local test_seq="$1"
local test_status="$2"
local test_time=`expr $stop - $start`
local strip="$SRC_DIR/"
local test_name=${test_seq#$strip}
local sect_name=$section
# TODO: other places may also win if no-section mode will be named like 'default/global'
if [ $sect_name == '-no-sections-' ]; then
sect_name='global'
fi
local report=$tmp.report.xunit.$sect_name.xml
echo -e "\t<testcase classname=\"xfstests.$sect_name\" name=\"$test_name\" time=\"$test_time\">" >> $report
case $test_status in
"pass")
;;
"notrun")
if [ -f $seqres.notrun ]; then
local msg=`cat $seqres.notrun | encode_xml`
echo -e "\t\t<skipped message=\"$msg\" />" >> $report
else
echo -e "\t\t<skipped/>" >> $report
fi
;;
"list")
echo -e "\t\t<skipped/>" >> $report
;;
"fail")
if [ -z "$_err_msg" ]; then
_err_msg="Test $sequm failed, reason unknown"
fi
echo -e "\t\t<failure message=\"$_err_msg\" type=\"TestFail\" />" >> $report
if [ -s $seqres.full ]; then
echo -e "\t\t<system-out>" >> $report
printf '<![CDATA[\n' >>$report
cat $seqres.full | tr -dc '[:print:][:space:]' | encode_xml >>$report
printf ']]>\n' >>$report
echo -e "\t\t</system-out>" >> $report
fi
if [ -f $seqres.dmesg ]; then
echo -e "\t\t<system-err>" >> $report
printf '<![CDATA[\n' >>$report
cat $seqres.dmesg | tr -dc '[:print:][:space:]' | encode_xml >>$report
printf ']]>\n' >>$report
echo -e "\t\t</system-err>" >> $report
elif [ -s $seqres.out.bad ]; then
echo -e "\t\t<system-err>" >> $report
printf '<![CDATA[\n' >>$report
$diff $test_seq.out $seqres.out.bad | encode_xml >>$report
printf ']]>\n' >>$report
echo -e "\t\t</system-err>" >> $report
fi
;;
*)
echo -e "\t\t<failure message=\"Unknown test_status=$test_status\" type=\"TestFail\"/>" >> $report
;;
esac
echo -e "\t</testcase>" >> $report
}
#
# Common report generator entry points
_make_section_report()
{
for report in $REPORT_LIST; do
case "$report" in
"xunit")
_xunit_make_section_report "$test_status"
;;
*)
_dump_err "format '$report' is not supported"
;;
esac
done
}
_make_testcase_report()
{
local test_seq="$1"
local test_status="$2"
for report in $REPORT_LIST; do
case "$report" in
"xunit")
_xunit_make_testcase_report "$test_seq" "$test_status"
;;
*)
_dump_err "report format '$report' is not supported"
;;
esac
done
}
_assert_report_list() {
for report in $REPORT_LIST; do
case "$report" in
"xunit")
;;
*)
_fatal "report format '$report' is not supported"
;;
esac
done
}