# # 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/" >> $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 "" > $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 "" >> $REPORT_DIR/result.xml # Properties echo -e "\t" >> $REPORT_DIR/result.xml for p in $REPORT_ENV_LIST;do _xunit_add_property "$p" done echo -e "\t" >> $REPORT_DIR/result.xml if [ -f $report ]; then cat $report >> $REPORT_DIR/result.xml fi echo "" >> $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" >> $report case $test_status in "pass") ;; "notrun") if [ -f $seqres.notrun ]; then local msg=`cat $seqres.notrun | encode_xml` echo -e "\t\t" >> $report else echo -e "\t\t" >> $report fi ;; "list") echo -e "\t\t" >> $report ;; "fail") if [ -z "$_err_msg" ]; then _err_msg="Test $sequm failed, reason unknown" fi echo -e "\t\t" >> $report if [ -s $seqres.full ]; then echo -e "\t\t" >> $report printf '>$report cat $seqres.full | tr -dc '[:print:][:space:]' | encode_xml >>$report printf ']]>\n' >>$report echo -e "\t\t" >> $report fi if [ -f $seqres.dmesg ]; then echo -e "\t\t" >> $report printf '>$report cat $seqres.dmesg | tr -dc '[:print:][:space:]' | encode_xml >>$report printf ']]>\n' >>$report echo -e "\t\t" >> $report elif [ -s $seqres.out.bad ]; then echo -e "\t\t" >> $report printf '>$report $diff $test_seq.out $seqres.out.bad | encode_xml >>$report printf ']]>\n' >>$report echo -e "\t\t" >> $report fi ;; *) echo -e "\t\t" >> $report ;; esac echo -e "\t" >> $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 }