75 lines
2.5 KiB
Bash
75 lines
2.5 KiB
Bash
#!/bin/sh
|
|
|
|
# This is analyzer of output of NPB-style formed tests
|
|
# Requires variables: LAUNCH_EXIT_CODE, STDOUT_FN, STDERR_FN
|
|
# Produces variables: SUBTEST_COUNT, TEST_PASSED, RESULT_COMMENT, ERROR_LEVEL, TASK_CALC_TIME
|
|
# Produces functions: analyze_subtest
|
|
|
|
SUBTEST_COUNT=`grep 'Completed.' <"$STDOUT_FN" | wc -l`
|
|
|
|
if [ `grep -E 'Assertion' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="Assertion failed"
|
|
ERROR_LEVEL=5
|
|
elif [ `grep -E 'RTS fatal' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="RTS fatal"
|
|
ERROR_LEVEL=4
|
|
elif [ `grep -E 'RTS err' <"$STDERR_FN" | wc -l` -gt 0 ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="RTS err"
|
|
ERROR_LEVEL=3
|
|
elif [ `grep "END OF" <"$STDOUT_FN" | wc -l` -eq 0 ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="Crash"
|
|
ERROR_LEVEL=2
|
|
elif [ $LAUNCH_EXIT_CODE -ne 0 ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="Launch failure"
|
|
ERROR_LEVEL=6
|
|
elif [ `grep ' SUCCESSFUL' <"$STDOUT_FN" | wc -l` -lt $SUBTEST_COUNT ]; then
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="Has failed subtests"
|
|
ERROR_LEVEL=1
|
|
else
|
|
TEST_PASSED=1
|
|
RESULT_COMMENT="OK"
|
|
ERROR_LEVEL=0
|
|
fi
|
|
|
|
if [ $SUBTEST_COUNT -eq 1 ]; then
|
|
TASK_CALC_TIME=`grep 'Time in seconds' <"$STDOUT_FN" | awk '{ print $5 }'`
|
|
fi
|
|
|
|
analyze_subtest() {
|
|
# Produces variables: SUBTEST_NAME, TEST_PASSED, RESULT_COMMENT, ERROR_LEVEL, TASK_CALC_TIME
|
|
local SUBTEST_RES_START=`grep -n 'Completed.' <"$STDOUT_FN" | head -n $1 | tail -n 1 | sed 's/:.*//g'`
|
|
local SUBTEST_RES_END=
|
|
if [ $1 -lt $SUBTEST_COUNT ]; then
|
|
SUBTEST_RES_END=`grep -n 'Completed.' <"$STDOUT_FN" | head -n $(( $1 + 1 )) | tail -n 1 | sed 's/:.*//g'`
|
|
SUBTEST_RES_END=$(( SUBTEST_RES_END - 1))
|
|
else
|
|
SUBTEST_RES_END=`cat "$STDOUT_FN" | wc -l`
|
|
fi
|
|
local linecount=$(( SUBTEST_RES_END - SUBTEST_RES_START + 1 ))
|
|
local tmp=`mktemp`
|
|
cat "$STDOUT_FN" | head -n $SUBTEST_RES_END | tail -n $linecount >$tmp
|
|
SUBTEST_NAME=`grep "Completed." <$tmp | head -n 1 | awk '{ print $1 }'`
|
|
local CLASS_NAME=`grep "Class" <$tmp | head -n 1 | awk '{ print $3 }'`
|
|
if [ -n "$CLASS_NAME" ]; then
|
|
SUBTEST_NAME="$SUBTEST_NAME ($CLASS_NAME)"
|
|
fi
|
|
TEST_PASSED=`grep "Verification" <$tmp | head -n 1 | awk '{ print $3 }'`
|
|
if [ "$TEST_PASSED" = "SUCCESSFUL" ]; then
|
|
TEST_PASSED=1
|
|
RESULT_COMMENT="OK"
|
|
ERROR_LEVEL=0
|
|
else
|
|
TEST_PASSED=0
|
|
RESULT_COMMENT="Subtest failed"
|
|
ERROR_LEVEL=1
|
|
fi
|
|
TASK_CALC_TIME=`grep 'Time in seconds' <$tmp | awk '{ print $5 }'`
|
|
rm $tmp
|
|
}
|