#!/bin/bash # coding: utf-8 # Copyright (C) 1994-2018 Altair Engineering, Inc. # For more information, contact Altair at www.altair.com. # # This file is part of the PBS Professional ("PBS Pro") software. # # Open Source License Information: # # PBS Pro is free software. You can redistribute it and/or modify it under the # terms of the GNU Affero General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) any # later version. # # PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # See the GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # Commercial License Information: # # For a copy of the commercial license terms and conditions, # go to: (http://www.pbspro.com/UserArea/agreement.html) # or contact the Altair Legal Department. # # Altair’s dual-license business model allows companies, individuals, and # organizations to create proprietary derivative works of PBS Pro and # distribute them - whether embedded or bundled with other software - # under a commercial license agreement. # # Use of Altair’s trademarks, including but not limited to "PBS™", # "PBS Professional®", and "PBS Pro™" and Altair’s logos is subject to Altair's # trademark licensing policies. prog="`basename $0`" usage() { echo -en "${prog}\n" echo -en "\tParses the PTL test output file and reports\n" echo -en "\tvarious counts like total, passed, failed, error-ed,\n" echo -en "\tskipped and timedout test cases from file.\n\n" echo -en "Usage:\n\t${prog} [OPTIONS]\n\n" echo -en "OPTIONS:\n" echo -en "\t-t | --total\t- Print total number of test cases\n" echo -en "\t-p | --passes\t- Print passed test cases\n" echo -en "\t-f | --fails\t- Print failed test cases\n" echo -en "\t-e | --errors\t- Print error-ed test cases\n" echo -en "\t-s | --skipped\t- Print skipped test cases\n" echo -en "\t-T | --timedout\t- Print timedout test cases\n" echo -en "\t-r | --runtime\t- Print total runtime of tests\n" echo -en "\t-S | --summary\t- Print summary of tests\n" echo -en "\t-v | --verbose\t- Print verbose output, can be supplied multiple times to increase verbosity\n\n" } # args: print_info() { if [ ${1} -eq 1 ] then [ ${_space} -eq 1 ] && echo " " || _space=1 if [ ${verbose} -ge 1 ] then [ ${2} -le 0 ] && echo "${3^} test(s): ${2}" && return [ ${verbose} -eq 1 -o ${3} == "skipped" ] && echo "${2} test(s) ${3}:" && \ sed -n "/^${3}: \(.*\)$/p" ${ptl_test_log} | awk '{ $1 = "\t"; print $0 }' && return if [ ${verbose} -gt 1 ] then lines=`sed -n "/^${3}: \(.*\)$/p" ${ptl_test_log} | awk '{ $1 = ""; gsub(/ /, "@", $0); print $0 }'` for line in ${lines} do line=${3^^}":"`echo ${line} | tr '@' ' '` echo ${line} sed -n "/${line}/,\${N;/^\n$/{P;q};P;D}" ${ptl_test_log} | \ awk 'NR > 3 { sub(/.*Traceback/, "Traceback", $0); print " "$0}' done fi else echo ${2} fi fi } if [ $# -le 1 ] then usage exit 1 fi ptl_test_log=$1 if [ ! -r "${ptl_test_log}" ] then echo "${prog}: ${ptl_test_log} doesn't exist or does't have read permission!" exit 1 fi total=0 passes=0 fails=0 errors=0 skipped=0 timedout=0 summary=0 verbose=0 runtime=0 _space=0 shift while [ "$1" != "" ]; do case $1 in -p | --passes) passes=1; shift;; -f | --fails) fails=1; shift;; -e | --errors) errors=1; shift;; -s | --skipped) skipped=1; shift ;; -T | --timedout) timedout=1; shift;; -v | --verbose) verbose=$((${verbose} + 1)); shift ;; -t | --total) total=1; shift;; -S | --summary) summary=1; shift;; -r | --runtime) runtime=1; shift;; -h | --help ) usage; exit 0;; * ) echo -en "Unknown Option: $1\n\n"; usage; exit 1; esac done summary_line=`sed -n '/^run:.*: [0-9]*$/p' ${ptl_test_log}` read total_ct pass_ct fail_ct err_ct skip_ct timedout_ct <<< \ `echo ${summary_line} | awk -F '[,:]' \ 'ORS=" " { for (i=2; i<=NF; i=i+2) { gsub(/^[ \t]+/, "", $i); print $i } }'` if [ ${total} -eq 1 ] then [ ${_space} -eq 1 ] && echo " " || _space=1 [ ${verbose} -ge 1 ] && echo "Total test(s): ${total_ct}" || echo ${total_ct} fi if [ ${passes} -eq 1 ] then [ ${_space} -eq 1 ] && echo " " || _space=1 [ ${verbose} -ge 1 ] && echo "Passed test(s): ${pass_ct}" || echo ${pass_ct} fi print_info ${fails} ${fail_ct} "failed" print_info ${errors} ${err_ct} "error" print_info ${skipped} ${skip_ct} "skipped" print_info ${timedout} ${timedout_ct} "timedout" if [ ${summary} -eq 1 ] then [ ${_space} -eq 1 ] && echo " " || _space=1 [ ${verbose} -ge 1 ] && echo -en "Summary: \n\t " echo ${summary_line} fi if [ ${runtime} -eq 1 ] then test_run_output=`sed -n '/^Tests run in [\.:0-9]*$/p' ${ptl_test_log} | awk -F. '{print $1}'` [ ${_space} -eq 1 ] && echo " " || _space=1 [ ${verbose} -ge 1 ] && echo ${test_run_output} || echo ${test_run_output} | awk '{ print $NF }' fi exit 0