#!/bin/bash # Bash is required due to usage of associative arrays MY_DIR=$(cd "$(dirname "$(which "$0")")" && pwd) SAVE_DIR=`pwd` TEST_SUITE="$1" RESULTS_DIR="$2" FULL_REP_URL="$3" REV_NUMBER=$4 if [ -z "$FULL_REP_URL" ]; then FULL_REP_URL="full-report.html" fi if [ -z "$REV_NUMBER" ]; then REV_NUMBER=UNKNOWN fi MAX_LONELY_OK=50 REPORT_DIR="$RESULTS_DIR/report" rm -rf "$REPORT_DIR" RES_FILES=`mktemp` find "$RESULTS_DIR" -mindepth 1 -type f | LC_ALL=C sort >$RES_FILES BUGGY_FILE_DIR="$REPORT_DIR/sources" mkdir -p "$BUGGY_FILE_DIR" REPORT_FILE="$REPORT_DIR/brief-report.html" FULL_REPORT_FILE="$REPORT_DIR/full-report.html" COL_COUNT=2 PLATFORMS= HAS_SUBTESTS=0 TOTAL_LAUNCHES=0 TOTAL_ERROR_LAUNCHES=0 while IFS= read -r f; do CUR_DEPTH=0 TEST_SHORT_PATH=`basename "$f" .result` TMPSTR=`dirname "$f"` while [ "$TMPSTR" != "$RESULTS_DIR" ]; do CUR_DEPTH=$(( $CUR_DEPTH + 1 )) TEST_SHORT_PATH="$(basename "$TMPSTR")/$TEST_SHORT_PATH" TMPSTR=`dirname "$TMPSTR"` done IS_SUBTEST=0 if [ ! -e "$TEST_SUITE/$TEST_SHORT_PATH" ]; then HAS_SUBTESTS=1 IS_SUBTEST=1 fi if [ $(( CUR_DEPTH + 2 )) -gt $COL_COUNT ]; then COL_COUNT=$(( $CUR_DEPTH + 2 )) fi if [ $IS_SUBTEST -eq 0 ]; then while IFS= read -r lin; do eval $lin if [ -z "$PLATFORMS" ]; then PLATFORMS=$PLATFORM else FOUND_FLAG=0 for platf in $PLATFORMS; do if [ $platf = $PLATFORM ]; then FOUND_FLAG=1 fi done if [ $FOUND_FLAG -eq 0 ]; then PLATFORMS="$PLATFORMS $PLATFORM" fi fi TOTAL_LAUNCHES=$(( $TOTAL_LAUNCHES + 1 )) if [ "$ERROR_LEVEL" != "0" ]; then TOTAL_ERROR_LAUNCHES=$(( $TOTAL_ERROR_LAUNCHES + 1 )) fi done <"$f" fi done <$RES_FILES CAT_COUNT=$(( COL_COUNT - 1 - HAS_SUBTESTS - 1 )) exec 5>"$REPORT_FILE" exec 6>"$FULL_REPORT_FILE" echo "" >& 5 echo "" >& 6 echo "" >& 5 echo "" >& 6 echo "Test results for DVM-system. Revision $REV_NUMBER." >& 5 echo "Test results for DVM-system. Revision $REV_NUMBER." >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 5 echo "" >& 6 echo "" >& 5 echo "" >& 6 echo "

Test results for DVM-system. Revision $REV_NUMBER.

" >& 5 echo "

Test results for DVM-system. Revision $REV_NUMBER.

" >& 6 echo "

Tested on platforms: $PLATFORMS.

" >& 5 echo "

Tested on platforms: $PLATFORMS.

" >& 6 echo "

Full report can be seen on $FULL_REP_URL

" >& 5 echo "

Launches with errors: $TOTAL_ERROR_LAUNCHES / $TOTAL_LAUNCHES

" >& 5 echo "

Launches with errors: $TOTAL_ERROR_LAUNCHES / $TOTAL_LAUNCHES

" >& 6 echo "

Download sources of buggy tests

" >& 6 echo "" >& 5 echo "
" >& 6 echo "" >& 5 echo "" >& 6 CUR_COL=0 while [ $CUR_COL -lt $CAT_COUNT ]; do echo "" >& 5 echo "" >& 6 CUR_COL=$(( CUR_COL + 1 )) done echo "" >& 5 echo "" >& 6 if [ $HAS_SUBTESTS -ne 0 ]; then echo "" >& 6 fi echo "" >& 5 echo "" >& 6 echo "" >& 5 echo "" >& 6 output_cat_recursive() { if [ `basename "$1"` != "$1" ]; then output_cat_recursive `dirname "$1"` fi if [ $TO_BRIEF -ne 0 ]; then echo "" >& 5 fi echo "" >& 6 FILLED_COLS=$(( FILLED_COLS + 1 )) if [ $FILLED_COLS -eq 1 -a `basename "$1"` = "Performance" ]; then FORCE_TABLE=1 fi } output_cat() { FILLED_COLS=0 output_cat_recursive "$1" while [ $FILLED_COLS -lt $CAT_COUNT ]; do if [ $TO_BRIEF -ne 0 ]; then echo "" >& 5 fi echo "" >& 6 FILLED_COLS=$(( FILLED_COLS + 1 )) done } nextDetailsId=1 while IFS= read -r f; do CUR_DEPTH=0 TEST_SHORT_PATH=`basename "$f" .result` TMPSTR=`dirname "$f"` while [ "$TMPSTR" != "$RESULTS_DIR" ]; do CUR_DEPTH=$(( $CUR_DEPTH + 1 )) TEST_SHORT_PATH="$(basename "$TMPSTR")/$TEST_SHORT_PATH" TMPSTR=`dirname "$TMPSTR"` done SUBTEST_NAME= if [ ! -e "$TEST_SUITE/$TEST_SHORT_PATH" ]; then SUBTEST_NAME=`basename "$TEST_SHORT_PATH"` TEST_SHORT_PATH=`dirname "$TEST_SHORT_PATH"` fi HAS_FAILS=0 if [ `grep "TEST_PASSED=0" <"$f" | wc -l` -gt 0 ]; then HAS_FAILS=1 if [ ! -e "$BUGGY_FILE_DIR/$TEST_SHORT_PATH" ]; then mkdir -p `dirname "$BUGGY_FILE_DIR/$TEST_SHORT_PATH"` cp -ur "$TEST_SUITE/$TEST_SHORT_PATH" "$BUGGY_FILE_DIR/$TEST_SHORT_PATH" fi fi TO_BRIEF=1 if [ -n "$SUBTEST_NAME" -o $HAS_FAILS -eq 0 ]; then TO_BRIEF=0 fi if [ $TO_BRIEF -ne 0 ]; then echo "" >& 5 fi echo "" >& 6 FORCE_TABLE=0 output_cat `dirname "$TEST_SHORT_PATH"` if [ $TO_BRIEF -ne 0 ]; then echo "" >& 5 fi if [ -n "$SUBTEST_NAME" ]; then echo "" >& 6 echo "" >& 6 else echo "" >& 6 fi ERROR_LEVELS=$( while IFS= read -r lin; do eval $lin if [ -z "$ERROR_LEVEL" ]; then ERROR_LEVEL=0 fi echo $ERROR_LEVEL done <"$f" | sort -unr) if [ $TO_BRIEF -ne 0 ]; then echo "" >& 5 echo "" >& 5 fi echo "" >& 6 echo "" >& 6 done <$RES_FILES echo "
CategoryCategoryTest nameTest nameSubtestTest resultTest result
" >& 5 basename "$1" >& 5 echo "" >& 6 basename "$1" >& 6 echo "  
" >& 5 echo `basename "$TEST_SHORT_PATH"` >& 5 echo "" >& 6 echo `basename "$TEST_SHORT_PATH"` >& 6 echo "" >& 6 echo "$SUBTEST_NAME" >& 6 echo "" >& 6 echo `basename "$TEST_SHORT_PATH"` >& 6 echo "" >& 5 fi echo "" >& 6 LAUNCH_COUNT=`wc -l <"$f"` # echo "$LAUNCH_COUNT total" >& 5 # echo "$LAUNCH_COUNT total" >& 6 if [ -n "$ERROR_LEVELS" ]; then for el in $ERROR_LEVELS; do unset countByComment unset passedByComment declare -A countByComment declare -A passedByComment while IFS= read -r lin; do eval $lin if [ -z "$ERROR_LEVEL" ]; then ERROR_LEVEL=0 fi if [ "$ERROR_LEVEL" = "$el" ]; then if [ -z "${countByComment["$RESULT_COMMENT"]}" ]; then countByComment["$RESULT_COMMENT"]=0 fi countByComment["$RESULT_COMMENT"]=$(( countByComment["$RESULT_COMMENT"] + 1 )) passedByComment["$RESULT_COMMENT"]=$TEST_PASSED fi done <"$f" for cmt in "${!countByComment[@]}"; do if [ ${passedByComment["$cmt"]} -ne 0 ]; then DIV_CLASS=passed DIV_COLOR=green else DIV_CLASS=failed DIV_COLOR=red fi if [ $TO_BRIEF -ne 0 ]; then echo "
" >& 5 echo "${countByComment[$cmt]} $cmt" >& 5 echo "
" >& 5 fi echo "
" >& 6 if [ $HAS_FAILS -ne 0 -o $LAUNCH_COUNT -le $MAX_LONELY_OK -o $FORCE_TABLE -ne 0 ]; then echo "" >& 6 echo "${countByComment[$cmt]} $cmt" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 echo "" >& 6 while IFS= read -r lin; do eval $lin if [ -z "$ERROR_LEVEL" ]; then ERROR_LEVEL=0 fi if [ "$ERROR_LEVEL" = "$el" -a "$RESULT_COMMENT" = "$cmt" ]; then echo "" >& 6 echo "" >& 6 if [ $NOH_FLAG -ne 0 ]; then echo "" >& 6 else echo "" >& 6 fi if [ $AUTOTFM_FLAG -ne 0 ]; then echo "" >& 6 else echo "" >& 6 fi if [ -n "$PROC_GRID" ]; then echo "" >& 6 else echo "" >& 6 fi if [ -n "$CPUS_PER_PROC" ]; then echo "" >& 6 else echo "" >& 6 fi if [ -n "$CUDAS_PER_PROC" ]; then echo "" >& 6 else echo "" >& 6 fi if [ -n "$CALC_TIME" ]; then echo "" >& 6 else echo "" >& 6 fi echo "" >& 6 fi done <"$f" echo "
PlatformnoHautoTfmGridCPUsGPUsTime
$PLATFORM+-+-$PROC_GRIDN/A$CPUS_PER_PROCN/A$CUDAS_PER_PROCN/A$CALC_TIMEN/A
" >& 6 nextDetailsId=$(( nextDetailsId + 1 )) else echo "${countByComment[$cmt]} $cmt" >& 6 fi echo "
" >& 6 done done else if [ $TO_BRIEF -ne 0 ]; then echo " " >& 5 fi echo " " >& 6 fi if [ $TO_BRIEF -ne 0 ]; then echo "
" >& 5 echo "" >& 6 echo "" >& 5 echo "" >& 6 echo "" >& 5 echo "" >& 6 exec 5>&- exec 6>&- cd "$REPORT_DIR" tar -czf "sources.tgz" "sources" cd "$SAVE_DIR" rm $RES_FILES