diff -u b/src/journal.sh b/src/journal.sh --- b/src/journal.sh +++ b/src/journal.sh @@ -115,12 +115,13 @@ export __INTERNAL_METAFILE_INDENT_LEVEL=0 __INTERNAL_PHASE_TYPE=() __INTERNAL_PHASE_NAME=() - export __INTERNAL_PRESISTENT_DATA="$BEAKERLIB_DIR/PersistentData" + export __INTERNAL_PERSISTENT_DATA="$BEAKERLIB_DIR/PersistentData" + export __INTERNAL_TEST_RESULTS="$BEAKERLIB_DIR/TestResults" export __INTERNAL_JOURNAL_OPEN='' __INTERNAL_PersistentDataLoad export __INTERNAL_PHASES_FAILED=0 export __INTERNAL_PHASES_PASSED=0 - export __INTERNAL_PHASES_SKIPED=0 + export __INTERNAL_PHASES_SKIPPED=0 export __INTERNAL_PHASES_WORST_RESULT='PASS' export __INTERNAL_TEST_STATE=0 __INTERNAL_PHASE_TXTLOG_START=() @@ -249,6 +250,7 @@ echo "#End of metafile" >> $__INTERNAL_BEAKERLIB_METAFILE __INTERNAL_JournalXMLCreate + __INTERNAL_TestResultsSave } @@ -346,11 +348,11 @@ __INTERNAL_update_journal_txt() { local textfile - local duration=$(($__INTERNAL_TIMESTAMP - $__INTERNAL_STARTTIME)) local endtime + __INTERNAL_DURATION=$(($__INTERNAL_TIMESTAMP - $__INTERNAL_STARTTIME)) printf -v endtime "%($__INTERNAL_TIMEFORMAT_LONG)T %s" $__INTERNAL_TIMESTAMP "(still running)" [[ -n "$__INTERNAL_ENDTIME" ]] && printf -v endtime "%($__INTERNAL_TIMEFORMAT_LONG)T" $__INTERNAL_ENDTIME - local sed_patterns="0,/ Test finished : /s/^( Test finished : ).*\$/\1$endtime/;0,/ Test duration : /s/^( Test duration : ).*\$/\1$duration seconds/" + local sed_patterns="0,/ Test finished : /s/^( Test finished : ).*\$/\1$endtime/;0,/ Test duration : /s/^( Test duration : ).*\$/\1$__INTERNAL_DURATION seconds/" for textfile in "$__INTERNAL_BEAKERLIB_JOURNAL_COLORED" "$__INTERNAL_BEAKERLIB_JOURNAL_TXT"; do sed -r -i "$sed_patterns" "$textfile" done @@ -439,6 +441,43 @@ return 0 } + +# Creation of TestResults file +# Each line of the file contains TESTRESULT_VAR=$RESULT_VALUE +# so the file can be sourced afterwards +__INTERNAL_TestResultsSave(){ + # Set exit code of the test according to worst phase result + case "$__INTERNAL_PHASES_WORST_RESULT" in + PASS) + __TESTRESULT_RESULT_ECODE="0" + ;; + WARN) + __TESTRESULT_RESULT_ECODE="10" + ;; + FAIL) + __TESTRESULT_RESULT_ECODE="20" + ;; + *) + __TESTRESULT_RESULT_ECODE="30" + ;; + esac + + cat > "$__INTERNAL_TEST_RESULTS" < "$__INTERNAL_PRESISTENT_DATA" < "$__INTERNAL_PERSISTENT_DATA" <> $__INTERNAL_PRESISTENT_DATA -declare -p __INTERNAL_PHASE_PASSED >> $__INTERNAL_PRESISTENT_DATA -declare -p __INTERNAL_PHASE_STARTTIME >> $__INTERNAL_PRESISTENT_DATA -declare -p __INTERNAL_PHASE_TXTLOG_START >> $__INTERNAL_PRESISTENT_DATA -declare -p __INTERNAL_PHASE_METRICS >> $__INTERNAL_PRESISTENT_DATA +declare -p __INTERNAL_PHASE_FAILED >> $__INTERNAL_PERSISTENT_DATA +declare -p __INTERNAL_PHASE_PASSED >> $__INTERNAL_PERSISTENT_DATA +declare -p __INTERNAL_PHASE_STARTTIME >> $__INTERNAL_PERSISTENT_DATA +declare -p __INTERNAL_PHASE_TXTLOG_START >> $__INTERNAL_PERSISTENT_DATA +declare -p __INTERNAL_PHASE_METRICS >> $__INTERNAL_PERSISTENT_DATA } __INTERNAL_PersistentDataLoad() { - [[ -r "$__INTERNAL_PRESISTENT_DATA" ]] && . "$__INTERNAL_PRESISTENT_DATA" + [[ -r "$__INTERNAL_PERSISTENT_DATA" ]] && . "$__INTERNAL_PERSISTENT_DATA" } # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ only in patch2: unchanged: --- a/src/beakerlib.sh +++ b/src/beakerlib.sh @@ -96,6 +96,48 @@ See the BKRDOC section for more information about Automated documentation genera =for comment beakerlib-manual-footer +=head1 OUTPUT FILES + +Location of test results related output files can be configured by setting BEAKERLIB_DIR variable before running the test. If it is not set, temporary directory is created. + +=head2 journal.txt + +Journal in human readable form. + +=head2 journal.xml + +Journal in XML format, requires python. This dependency can be avoided if the test is run with variable BEAKERLIB_JOURNAL set to 0 in which case journal.xml is not created. + +=head3 XSLT + +XML journal can be transformed through XSLT template. Which template is used is configurable by setting BEAKERLIB_JOURNAL variable. Value can be either filename in which case beakerlib will try to use $INSTALL_DIR/xslt-template/$filename (e.g.: /usr/share/beakerlib/xstl-templates/xunit.xsl) or it can be path to a template anywhere on the system. + +=head2 TestResults + +Overall results of the test in a 'sourceable' form. Each line contains a pair VAR=VALUE. All variable names have 'TESTRESULT_' prefix. + +=head3 List of variables: + +TESTRESULT_RESULT_STRING - Result of the test in a string, e.g.: PASS, FAIL, WARN. + +TESTRESULT_RESULT_ECODE - Result of the test as an integer, 0 equals to PASS. + +TESTRESULT_PHASES_PASSED - Number of phases that ended with PASS. + +TESTRESULT_PHASES_FAILED - Number of phases that ended with non-PASS result. + +TESTRESULT_PHASES_SKIPPED - Number of skipped phases. + +TESTRESULT_ASSERTS_FAILED - Number of asserts that ended with non-PASS result in the whole test. + +TESTRESULT_STARTTIME - Time when test started in seconds since epoch. + +TESTRESULT_ENDTIME - Time when test ended in seconds since epoch. + +TESTRESULT_DURATION - Duration of the test run in seconds. + +TESTRESULT_BEAKERLIB_DIR - Directory with test results files. + =head1 EXAMPLES =head2 Simple