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" <<EOF
+# This is a result file of the test in a 'sourceable' form.
+# Description of individual variables can be found in beakerlib man page.
+TESTRESULT_RESULT_STRING=$__INTERNAL_PHASES_WORST_RESULT
+TESTRESULT_RESULT_ECODE=$__TESTRESULT_RESULT_ECODE
+TESTRESULT_PHASES_PASSED=$__INTERNAL_PHASES_PASSED
+TESTRESULT_PHASES_FAILED=$__INTERNAL_PHASES_FAILED
+TESTRESULT_PHASES_SKIPPED=$__INTERNAL_PHASES_SKIPPED
+TESTRESULT_ASSERTS_FAILED=$__INTERNAL_TEST_STATE
+TESTRESULT_STARTTIME=$__INTERNAL_STARTTIME
+TESTRESULT_ENDTIME=$__INTERNAL_ENDTIME
+TESTRESULT_DURATION=$__INTERNAL_DURATION
+TESTRESULT_BEAKERLIB_DIR=$BEAKERLIB_DIR
+EOF
+}
+
# backward compatibility
rlCreateLogFromJournal(){
rlLogWarning "rlCreateLogFromJournal is obsoleted by rlJournalPrintText"
@@ -891,29 +930,29 @@
}
-# whenever any of the persistend variable is touched,
+# whenever any of the persistent variable is touched,
# functions __INTERNAL_PersistentDataLoad and __INTERNAL_PersistentDataSave
# should be called before and after that respectively.
__INTERNAL_PersistentDataSave() {
- cat > "$__INTERNAL_PRESISTENT_DATA" <<EOF
+ cat > "$__INTERNAL_PERSISTENT_DATA" <<EOF
__INTERNAL_STARTTIME=$__INTERNAL_STARTTIME
__INTERNAL_TEST_STATE=$__INTERNAL_TEST_STATE
__INTERNAL_PHASES_PASSED=$__INTERNAL_PHASES_PASSED
__INTERNAL_PHASES_FAILED=$__INTERNAL_PHASES_FAILED
-__INTERNAL_PHASES_SKIPED=$__INTERNAL_PHASES_SKIPED
+__INTERNAL_PHASES_SKIPPED=$__INTERNAL_PHASES_SKIPPED
__INTERNAL_JOURNAL_OPEN=$__INTERNAL_JOURNAL_OPEN
__INTERNAL_PHASES_WORST_RESULT=$__INTERNAL_PHASES_WORST_RESULT
EOF
-declare -p __INTERNAL_PHASE_FAILED >> $__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