|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Name: journal.sh - part of the BeakerLib project
|
|
Packit |
bbb0ff |
# Description: Journalling functionality
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Author: Petr Muller <pmuller@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Ales Zelinka <azelinka@redhat.com>
|
|
Packit |
bbb0ff |
# Author: Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# Copyright (c) 2008-2010 Red Hat, Inc. All rights reserved.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This copyrighted material is made available to anyone wishing
|
|
Packit |
bbb0ff |
# to use, modify, copy, or redistribute it subject to the terms
|
|
Packit |
bbb0ff |
# and conditions of the GNU General Public License version 2.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# This program is distributed in the hope that it will be
|
|
Packit |
bbb0ff |
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
Packit |
bbb0ff |
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
bbb0ff |
# PURPOSE. See the GNU General Public License for more details.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# You should have received a copy of the GNU General Public
|
|
Packit |
bbb0ff |
# License along with this program; if not, write to the Free
|
|
Packit |
bbb0ff |
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
bbb0ff |
# Boston, MA 02110-1301, USA.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 NAME
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
BeakerLib - journal - journalling functionality
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 DESCRIPTION
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Routines for initializing the journalling features and pretty
|
|
Packit |
bbb0ff |
printing journal contents.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 FUNCTIONS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_JOURNALIST=beakerlib-journalling
|
|
Packit |
bbb0ff |
__INTERNAL_TIMEFORMAT_TIME="%H:%M:%S"
|
|
Packit |
bbb0ff |
__INTERNAL_TIMEFORMAT_DATE_TIME="%Y-%m-%d %H:%M:%S %Z"
|
|
Packit |
bbb0ff |
__INTERNAL_TIMEFORMAT_SHORT="$__INTERNAL_TIMEFORMAT_TIME"
|
|
Packit |
bbb0ff |
__INTERNAL_TIMEFORMAT_LONG="$__INTERNAL_TIMEFORMAT_DATE_TIME"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlJournalStart
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head2 Journalling
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlJournalStart
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Initialize the journal file.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalStart
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Run on the very beginning of your script to initialize journalling
|
|
Packit |
bbb0ff |
functionality.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalStart(){
|
|
Packit |
bbb0ff |
__INTERNAL_SET_TIMESTAMP
|
|
Packit |
bbb0ff |
export __INTERNAL_STARTTIME="$__INTERNAL_TIMESTAMP"
|
|
Packit |
bbb0ff |
export __INTERNAL_ENDTIME=""
|
|
Packit |
bbb0ff |
# test-specific temporary directory for journal/metadata
|
|
Packit |
bbb0ff |
if [ -n "$BEAKERLIB_DIR" ]; then
|
|
Packit |
bbb0ff |
# try user-provided temporary directory first
|
|
Packit |
bbb0ff |
true
|
|
Packit |
bbb0ff |
elif [ -n "$TESTID" ]; then
|
|
Packit |
bbb0ff |
# if available, use TESTID for the temporary directory
|
|
Packit |
bbb0ff |
# - this is useful for preserving metadata through a system reboot
|
|
Packit |
bbb0ff |
export BEAKERLIB_DIR="$__INTERNAL_PERSISTENT_TMP/beakerlib-$TESTID"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
# else generate a random temporary directory
|
|
Packit |
bbb0ff |
export BEAKERLIB_DIR=$(mktemp -d $__INTERNAL_PERSISTENT_TMP/beakerlib-XXXXXXX)
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[ -d "$BEAKERLIB_DIR" ] || mkdir -p "$BEAKERLIB_DIR" || {
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "could not create BEAKERLIB_DIR $BEAKERLIB_DIR" FATAL
|
|
Packit |
bbb0ff |
exit 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# set global internal BeakerLib journal and metafile variables
|
|
Packit |
bbb0ff |
export __INTERNAL_BEAKERLIB_JOURNAL="$BEAKERLIB_DIR/journal.xml"
|
|
Packit |
bbb0ff |
export __INTERNAL_BEAKERLIB_METAFILE="$BEAKERLIB_DIR/journal.meta"
|
|
Packit |
bbb0ff |
export __INTERNAL_BEAKERLIB_JOURNAL_TXT="$BEAKERLIB_DIR/journal.txt"
|
|
Packit |
bbb0ff |
export __INTERNAL_BEAKERLIB_JOURNAL_COLORED="$BEAKERLIB_DIR/journal_colored.txt"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# make sure the directory is ready, otherwise we cannot continue
|
|
Packit |
bbb0ff |
if [ ! -d "$BEAKERLIB_DIR" ] ; then
|
|
Packit |
bbb0ff |
echo "rlJournalStart: Failed to create $BEAKERLIB_DIR directory."
|
|
Packit |
bbb0ff |
echo "rlJournalStart: Cannot continue, exiting..."
|
|
Packit |
bbb0ff |
exit 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# creating queue file
|
|
Packit |
bbb0ff |
touch $__INTERNAL_BEAKERLIB_METAFILE || {
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "could not write to BEAKERLIB_DIR $BEAKERLIB_DIR" FATAL
|
|
Packit |
bbb0ff |
exit 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Initialization of variables holding current state of the test
|
|
Packit |
bbb0ff |
export __INTERNAL_METAFILE_INDENT_LEVEL=0
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TYPE=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_NAME=()
|
|
Packit |
c623bd |
export __INTERNAL_PERSISTENT_DATA="$BEAKERLIB_DIR/PersistentData"
|
|
Packit |
c623bd |
export __INTERNAL_TEST_RESULTS="$BEAKERLIB_DIR/TestResults"
|
|
Packit |
bbb0ff |
export __INTERNAL_JOURNAL_OPEN=''
|
|
Packit |
bbb0ff |
export __INTERNAL_PHASES_FAILED=0
|
|
Packit |
bbb0ff |
export __INTERNAL_PHASES_PASSED=0
|
|
Packit |
c623bd |
export __INTERNAL_PHASES_SKIPPED=0
|
|
Packit |
bbb0ff |
export __INTERNAL_PHASES_WORST_RESULT='PASS'
|
|
Packit |
bbb0ff |
export __INTERNAL_TEST_STATE=0
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TXTLOG_START=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_FAILED=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_PASSED=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_STARTTIME=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_METRICS=()
|
|
Packit |
bbb0ff |
export __INTERNAL_PHASE_OPEN=0
|
|
Packit |
e5f2ee |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [[ -z "$__INTERNAL_JOURNAL_OPEN" ]]; then
|
|
Packit |
bbb0ff |
# Create Header for XML journal
|
|
Packit |
bbb0ff |
__INTERNAL_CreateHeader
|
|
Packit |
bbb0ff |
# Create log element for XML journal
|
|
Packit |
e5f2ee |
__INTERNAL_WriteToMetafile log || {
|
|
Packit |
e5f2ee |
__INTERNAL_LogText "could not write to metafile" FATAL
|
|
Packit |
e5f2ee |
exit 1
|
|
Packit |
e5f2ee |
}
|
|
Packit |
e5f2ee |
__INTERNAL_JOURNAL_OPEN=1
|
|
Packit |
e5f2ee |
# Increase level of indent
|
|
Packit |
e5f2ee |
__INTERNAL_METAFILE_INDENT_LEVEL=1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# display a warning message if run in POSIX mode
|
|
Packit |
bbb0ff |
if [ $POSIXFIXED == "YES" ] ; then
|
|
Packit |
bbb0ff |
rlLogWarning "POSIX mode detected and switched off"
|
|
Packit |
bbb0ff |
rlLogWarning "Please fix your test to have /bin/bash shebang"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Check BEAKERLIB_JOURNAL parameter
|
|
Packit |
bbb0ff |
[ -n "$BEAKERLIB_JOURNAL" ] && __INTERNAL_JournalParamCheck
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# final cleanup file (atomic updates)
|
|
Packit |
bbb0ff |
export __INTERNAL_CLEANUP_FINAL="$BEAKERLIB_DIR/cleanup.sh"
|
|
Packit |
bbb0ff |
# cleanup "buffer" used for append/prepend
|
|
Packit |
bbb0ff |
export __INTERNAL_CLEANUP_BUFF="$BEAKERLIB_DIR/clbuff"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if touch "$__INTERNAL_CLEANUP_FINAL" "$__INTERNAL_CLEANUP_BUFF"; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlJournalStart: Basic cleanup infrastructure successfully initialized"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ -n "$TESTWATCHER_CLPATH" ] && \
|
|
Packit |
bbb0ff |
echo "$__INTERNAL_CLEANUP_FINAL" > "$TESTWATCHER_CLPATH"; then
|
|
Packit |
bbb0ff |
rlLogDebug "rlJournalStart: Running in test watcher and setup was successful"
|
|
Packit |
bbb0ff |
export __INTERNAL_TESTWATCHER_ACTIVE=true
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogDebug "rlJournalStart: Not running in test watcher or setup failed."
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "rlJournalStart: Failed to set up cleanup infrastructure"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# backward compatibility
|
|
Packit |
bbb0ff |
rlStartJournal() {
|
|
Packit |
bbb0ff |
rlJournalStart
|
|
Packit |
bbb0ff |
rlLogWarning "rlStartJournal is obsoleted by rlJournalStart"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Check if XML journal is to be created and if so
|
|
Packit |
bbb0ff |
# whether it should be xsl transformed and how.
|
|
Packit |
bbb0ff |
# Sets BEAKERLIB_JOURNAL and __INTERNAL_XSLT vars.
|
|
Packit |
bbb0ff |
__INTERNAL_JournalParamCheck(){
|
|
Packit |
bbb0ff |
__INTERNAL_XSLT=''
|
|
Packit |
bbb0ff |
if [[ "$BEAKERLIB_JOURNAL" != "0" ]]; then
|
|
Packit |
bbb0ff |
if [[ -r "$BEAKERLIB/xslt-templates/$BEAKERLIB_JOURNAL" ]]; then
|
|
Packit |
bbb0ff |
__INTERNAL_XSLT="--xslt $BEAKERLIB/xslt-templates/$BEAKERLIB_JOURNAL"
|
|
Packit |
bbb0ff |
elif [[ -r "$BEAKERLIB_JOURNAL" ]]; then
|
|
Packit |
bbb0ff |
__INTERNAL_XSLT="--xslt $BEAKERLIB_JOURNAL"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogError "xslt file '$BEAKERLIB_JOURNAL' is not readable"
|
|
Packit |
bbb0ff |
BEAKERLIB_JOURNAL="0"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogInfo "skipping xml journal creation"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlJournalEnd
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlJournalEnd
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Summarize the test run and upload the journal file.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalEnd
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Run on the very end of your script to print summary of the whole test run,
|
|
Packit |
bbb0ff |
generate OUTPUTFILE and include journal in Beaker logs.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalEnd(){
|
|
Packit |
bbb0ff |
if [ -z "$__INTERNAL_TESTWATCHER_ACTIVE" ] && [ -s "$__INTERNAL_CLEANUP_FINAL" ] && \
|
|
Packit |
bbb0ff |
[ -z "$__INTERNAL_CLEANUP_FROM_JOURNALEND" ]
|
|
Packit |
bbb0ff |
then
|
|
Packit |
bbb0ff |
rlLogWarning "rlJournalEnd: Not running in test watcher and rlCleanup* functions were used"
|
|
Packit |
bbb0ff |
rlLogWarning "rlJournalEnd: Executing prepared cleanup"
|
|
Packit |
bbb0ff |
rlLogWarning "rlJournalEnd: Please fix the test to use test watcher"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# The executed cleanup will always run rlJournalEnd, so we need to prevent
|
|
Packit |
bbb0ff |
# infinite recursion. rlJournalEnd runs the cleanup only when
|
|
Packit |
bbb0ff |
# __INTERNAL_CLEANUP_FROM_JOURNALEND is not set (see above).
|
|
Packit |
bbb0ff |
__INTERNAL_CLEANUP_FROM_JOURNALEND=1 "$__INTERNAL_CLEANUP_FINAL"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Return, because the rest of the rlJournalEnd was already run inside the cleanup
|
|
Packit |
bbb0ff |
return $?
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
if [ -z "$BEAKERLIB_COMMAND_SUBMIT_LOG" ]
|
|
Packit |
bbb0ff |
then
|
|
Packit |
bbb0ff |
local BEAKERLIB_COMMAND_SUBMIT_LOG="$__INTERNAL_DEFAULT_SUBMIT_LOG"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_SET_TIMESTAMP
|
|
Packit |
bbb0ff |
__INTERNAL_ENDTIME=$__INTERNAL_TIMESTAMP
|
|
Packit |
bbb0ff |
__INTERNAL_update_journal_txt
|
|
Packit |
bbb0ff |
|
|
Packit |
6b34d7 |
__INTERNAL_PrintHeadLog "${__INTERNAL_TEST_NAME}" 2>&1
|
|
Packit |
6b34d7 |
|
|
Packit |
bbb0ff |
if [ -n "$TESTID" ] ; then
|
|
Packit |
bbb0ff |
__INTERNAL_JournalXMLCreate
|
|
Packit |
bbb0ff |
$BEAKERLIB_COMMAND_SUBMIT_LOG -T $TESTID -l $__INTERNAL_BEAKERLIB_JOURNAL \
|
|
Packit |
bbb0ff |
|| rlLogError "rlJournalEnd: Submit wasn't successful"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
[[ "$BEAKERLIB_JOURNAL" == "0" ]] || rlLog "JOURNAL XML: $__INTERNAL_BEAKERLIB_JOURNAL"
|
|
Packit |
bbb0ff |
rlLog "JOURNAL TXT: $__INTERNAL_BEAKERLIB_JOURNAL_TXT"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
echo "#End of metafile" >> $__INTERNAL_BEAKERLIB_METAFILE
|
|
Packit |
6b34d7 |
|
|
Packit |
b05e72 |
__INTERNAL_PrintFootLog $__INTERNAL_STARTTIME \
|
|
Packit |
b05e72 |
$__INTERNAL_ENDTIME \
|
|
Packit |
b05e72 |
Phases \
|
|
Packit |
b05e72 |
$__INTERNAL_PHASES_PASSED \
|
|
Packit |
b05e72 |
$__INTERNAL_PHASES_FAILED \
|
|
Packit |
b05e72 |
$__INTERNAL_PHASES_WORST_RESULT \
|
|
Packit |
b05e72 |
"OVERALL"
|
|
Packit |
6b34d7 |
|
|
Packit |
bbb0ff |
__INTERNAL_JournalXMLCreate
|
|
Packit |
c623bd |
__INTERNAL_TestResultsSave
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# __INTERNAL_JournalXMLCreate
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
#: <<'=cut'
|
|
Packit |
bbb0ff |
#=pod
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
#=head3 __INTERNAL_JournalXMLCreate
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
#Create XML version of the journal from internal structure.
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
# __INTERNAL_JournalXMLCreate
|
|
Packit |
bbb0ff |
#
|
|
Packit |
bbb0ff |
#=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_JournalXMLCreate() {
|
|
Packit |
bbb0ff |
[[ "$BEAKERLIB_JOURNAL" == "0" ]] || $__INTERNAL_JOURNALIST $__INTERNAL_XSLT --metafile \
|
|
Packit |
bbb0ff |
"$__INTERNAL_BEAKERLIB_METAFILE" --journal "$__INTERNAL_BEAKERLIB_JOURNAL"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlJournalPrint
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlJournalPrint
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Print the content of the journal in pretty xml format.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalPrint [type]
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item type
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Can be either 'raw' or 'pretty', with the latter as a default.
|
|
Packit |
bbb0ff |
Raw: xml is in raw form, no indentation etc
|
|
Packit |
bbb0ff |
Pretty: xml is pretty printed, indented, with one record per line
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Example:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
<BEAKER_TEST>
|
|
Packit |
bbb0ff |
<test_id>debugging</test_id>
|
|
Packit |
bbb0ff |
<package>setup</package>
|
|
Packit |
bbb0ff |
<pkgdetails>setup-2.8.9-1.fc12.noarch</pkgdetails>
|
|
Packit |
bbb0ff |
<starttime>2010-02-08 15:17:47</starttime>
|
|
Packit |
bbb0ff |
<endtime>2010-02-08 15:17:47</endtime>
|
|
Packit |
bbb0ff |
<testname>/examples/beakerlib/Sanity/simple</testname>
|
|
Packit |
bbb0ff |
<release>Fedora release 12 (Constantine)</release>
|
|
Packit |
bbb0ff |
<hostname>localhost</hostname>
|
|
Packit |
bbb0ff |
<arch>i686</arch>
|
|
Packit |
bbb0ff |
<purpose>PURPOSE of /examples/beakerlib/Sanity/simple
|
|
Packit |
bbb0ff |
Description: Minimal BeakerLib sanity test
|
|
Packit |
bbb0ff |
Author: Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
This is a minimal sanity test for BeakerLib. It contains a single
|
|
Packit |
bbb0ff |
phase with a couple of asserts. We Just check that the "setup"
|
|
Packit |
bbb0ff |
package is installed and that there is a sane /etc/passwd file.
|
|
Packit |
bbb0ff |
</purpose>
|
|
Packit |
bbb0ff |
<log>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
score="0" starttime="2010-02-08 15:17:47" type="FAIL">
|
|
Packit |
bbb0ff |
<test message="Checking for the presence of setup rpm">PASS</test>
|
|
Packit |
bbb0ff |
<test message="File /etc/passwd should exist">PASS</test>
|
|
Packit |
bbb0ff |
<test message="File '/etc/passwd' should contain 'root'">PASS</test>
|
|
Packit |
bbb0ff |
</phase>
|
|
Packit |
bbb0ff |
</log>
|
|
Packit |
bbb0ff |
</BEAKER_TEST>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# cat generated text version
|
|
Packit |
bbb0ff |
rlJournalPrint(){
|
|
Packit |
bbb0ff |
__INTERNAL_JournalXMLCreate
|
|
Packit |
bbb0ff |
if [[ "$1" == "raw" ]]; then
|
|
Packit |
bbb0ff |
cat $__INTERNAL_BEAKERLIB_JOURNAL
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
cat $__INTERNAL_BEAKERLIB_JOURNAL | xmllint --format -
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# backward compatibility
|
|
Packit |
bbb0ff |
rlPrintJournal() {
|
|
Packit |
bbb0ff |
rlLogWarning "rlPrintJournal is obsoleted by rlJournalPrint"
|
|
Packit |
bbb0ff |
rlJournalPrint
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_update_journal_txt() {
|
|
Packit |
bbb0ff |
local textfile
|
|
Packit |
bbb0ff |
local endtime
|
|
Packit |
c623bd |
__INTERNAL_DURATION=$(($__INTERNAL_TIMESTAMP - $__INTERNAL_STARTTIME))
|
|
Packit |
bbb0ff |
printf -v endtime "%($__INTERNAL_TIMEFORMAT_LONG)T %s" $__INTERNAL_TIMESTAMP "(still running)"
|
|
Packit |
bbb0ff |
[[ -n "$__INTERNAL_ENDTIME" ]] && printf -v endtime "%($__INTERNAL_TIMEFORMAT_LONG)T" $__INTERNAL_ENDTIME
|
|
Packit |
c623bd |
local sed_patterns="0,/ Test finished : /s/^( Test finished : ).*\$/\1$endtime/;0,/ Test duration : /s/^( Test duration : ).*\$/\1$__INTERNAL_DURATION seconds/"
|
|
Packit |
bbb0ff |
for textfile in "$__INTERNAL_BEAKERLIB_JOURNAL_COLORED" "$__INTERNAL_BEAKERLIB_JOURNAL_TXT"; do
|
|
Packit |
bbb0ff |
sed -r -i "$sed_patterns" "$textfile"
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlJournalPrintText
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlJournalPrintText
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Print the content of the journal in pretty text format.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlJournalPrintText [--full-journal]
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item --full-journal
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
The options is now deprecated, has no effect and will be removed in one
|
|
Packit |
bbb0ff |
of future versions.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Example:
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
:: [ LOG ] :: TEST PROTOCOL
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test run ID : debugging
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Package : debugging
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test started : 2010-02-08 14:45:57
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test finished : 2010-02-08 14:45:58
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test name :
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Distro: : Fedora release 12 (Constantine)
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Hostname : localhost
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Architecture : i686
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test description
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
PURPOSE of /examples/beakerlib/Sanity/simple
|
|
Packit |
bbb0ff |
Description: Minimal BeakerLib sanity test
|
|
Packit |
bbb0ff |
Author: Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
This is a minimal sanity test for BeakerLib. It contains a single
|
|
Packit |
bbb0ff |
phase with a couple of asserts. We Just check that the "setup"
|
|
Packit |
bbb0ff |
package is installed and that there is a sane /etc/passwd file.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Test
|
|
Packit |
bbb0ff |
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
:: [ PASS ] :: Checking for the presence of setup rpm
|
|
Packit |
bbb0ff |
:: [ PASS ] :: File /etc/passwd should exist
|
|
Packit |
bbb0ff |
:: [ PASS ] :: File '/etc/passwd' should contain 'root'
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Duration: 1s
|
|
Packit |
bbb0ff |
:: [ LOG ] :: Assertions: 3 good, 0 bad
|
|
Packit |
bbb0ff |
:: [ PASS ] :: RESULT: Test
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
# call rlJournalPrint
|
|
Packit |
bbb0ff |
rlJournalPrintText(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
__INTERNAL_update_journal_txt
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
echo -e "\n\n\n\n"
|
|
Packit |
bbb0ff |
local textfile
|
|
Packit |
bbb0ff |
[[ -t 1 ]] && textfile="$__INTERNAL_BEAKERLIB_JOURNAL_COLORED" || textfile="$__INTERNAL_BEAKERLIB_JOURNAL_TXT"
|
|
Packit |
bbb0ff |
cat "$textfile"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
c623bd |
|
|
Packit |
c623bd |
# Creation of TestResults file
|
|
Packit |
c623bd |
# Each line of the file contains TESTRESULT_VAR=$RESULT_VALUE
|
|
Packit |
c623bd |
# so the file can be sourced afterwards
|
|
Packit |
c623bd |
__INTERNAL_TestResultsSave(){
|
|
Packit |
c623bd |
# Set exit code of the test according to worst phase result
|
|
Packit |
c623bd |
case "$__INTERNAL_PHASES_WORST_RESULT" in
|
|
Packit |
c623bd |
PASS)
|
|
Packit |
c623bd |
__TESTRESULT_RESULT_ECODE="0"
|
|
Packit |
c623bd |
;;
|
|
Packit |
c623bd |
WARN)
|
|
Packit |
c623bd |
__TESTRESULT_RESULT_ECODE="10"
|
|
Packit |
c623bd |
;;
|
|
Packit |
c623bd |
FAIL)
|
|
Packit |
c623bd |
__TESTRESULT_RESULT_ECODE="20"
|
|
Packit |
c623bd |
;;
|
|
Packit |
c623bd |
*)
|
|
Packit |
c623bd |
__TESTRESULT_RESULT_ECODE="30"
|
|
Packit |
c623bd |
;;
|
|
Packit |
c623bd |
esac
|
|
Packit |
c623bd |
|
|
Packit |
c623bd |
cat > "$__INTERNAL_TEST_RESULTS" <
|
|
Packit |
c623bd |
# This is a result file of the test in a 'sourceable' form.
|
|
Packit |
c623bd |
# Description of individual variables can be found in beakerlib man page.
|
|
Packit |
c623bd |
TESTRESULT_RESULT_STRING=$__INTERNAL_PHASES_WORST_RESULT
|
|
Packit |
c623bd |
TESTRESULT_RESULT_ECODE=$__TESTRESULT_RESULT_ECODE
|
|
Packit |
c623bd |
TESTRESULT_PHASES_PASSED=$__INTERNAL_PHASES_PASSED
|
|
Packit |
c623bd |
TESTRESULT_PHASES_FAILED=$__INTERNAL_PHASES_FAILED
|
|
Packit |
c623bd |
TESTRESULT_PHASES_SKIPPED=$__INTERNAL_PHASES_SKIPPED
|
|
Packit |
c623bd |
TESTRESULT_ASSERTS_FAILED=$__INTERNAL_TEST_STATE
|
|
Packit |
c623bd |
TESTRESULT_STARTTIME=$__INTERNAL_STARTTIME
|
|
Packit |
c623bd |
TESTRESULT_ENDTIME=$__INTERNAL_ENDTIME
|
|
Packit |
c623bd |
TESTRESULT_DURATION=$__INTERNAL_DURATION
|
|
Packit |
c623bd |
TESTRESULT_BEAKERLIB_DIR=$BEAKERLIB_DIR
|
|
Packit |
c623bd |
EOF
|
|
Packit |
c623bd |
}
|
|
Packit |
c623bd |
|
|
Packit |
bbb0ff |
# backward compatibility
|
|
Packit |
bbb0ff |
rlCreateLogFromJournal(){
|
|
Packit |
bbb0ff |
rlLogWarning "rlCreateLogFromJournal is obsoleted by rlJournalPrintText"
|
|
Packit |
bbb0ff |
rlJournalPrintText
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlGetTestState
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlGetTestState
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns number of failed asserts in so far, 255 if there are more then 255 failures.
|
|
Packit |
bbb0ff |
The precise number is set to ECODE variable.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlGetTestState
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlGetTestState(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
ECODE=$__INTERNAL_TEST_STATE
|
|
Packit |
bbb0ff |
rlLogDebug "rlGetTestState: $ECODE failed assert(s) in test"
|
|
Packit |
bbb0ff |
[[ $ECODE -gt 255 ]] && return 255 || return $ECODE
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# rlGetPhaseState
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<=cut
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head3 rlGetPhaseState
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Returns number of failed asserts in current phase so far, 255 if there are more then 255 failures.
|
|
Packit |
bbb0ff |
The precise number is set to ECODE variable.
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlGetPhaseState
|
|
Packit |
bbb0ff |
=cut
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlGetPhaseState(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
ECODE=$__INTERNAL_PHASE_FAILED
|
|
Packit |
bbb0ff |
rlLogDebug "rlGetPhaseState: $ECODE failed assert(s) in phase"
|
|
Packit |
bbb0ff |
[[ $ECODE -gt 255 ]] && return 255 || return $ECODE
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# Internal Stuff
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rljAddPhase(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
local MSG=${2:-"Phase of $1 type"}
|
|
Packit |
fc5b64 |
local TXTLOG_START=$(cat $__INTERNAL_BEAKERLIB_JOURNAL_TXT | wc -l)
|
|
Packit |
bbb0ff |
rlLogDebug "rljAddPhase: Phase $MSG started"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile phase --name "$MSG" --type "$1" >&2
|
|
Packit |
bbb0ff |
# Printing
|
|
Packit |
bbb0ff |
__INTERNAL_PrintHeadLog "$MSG"
|
|
Packit |
bbb0ff |
|
|
Packit |
5e1fe0 |
if [[ "$BEAKERLIB_NESTED_PHASES" == "0" ]]; then
|
|
Packit |
bbb0ff |
__INTERNAL_METAFILE_INDENT_LEVEL=2
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TYPE=( "$1" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_NAME=( "$MSG" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_FAILED=( 0 )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_PASSED=( 0 )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_STARTTIME=( $__INTERNAL_TIMESTAMP )
|
|
Packit |
fc5b64 |
__INTERNAL_PHASE_TXTLOG_START=( $TXTLOG_START )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_OPEN=${#__INTERNAL_PHASE_NAME[@]}
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_METRICS=( "" )
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
let __INTERNAL_METAFILE_INDENT_LEVEL++
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TYPE=( "$1" "${__INTERNAL_PHASE_TYPE[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_NAME=( "$MSG" "${__INTERNAL_PHASE_NAME[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_FAILED=( 0 "${__INTERNAL_PHASE_FAILED[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_PASSED=( 0 "${__INTERNAL_PHASE_PASSED[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_STARTTIME=( $__INTERNAL_TIMESTAMP "${__INTERNAL_PHASE_STARTTIME[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TXTLOG_START=( $TXTLOG_START "${__INTERNAL_PHASE_TXTLOG_START[@]}" )
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_OPEN=${#__INTERNAL_PHASE_NAME[@]}
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_METRICS=( "" "${__INTERNAL_PHASE_METRICS[@]}" )
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_SET_WORST_PHASE_RESULT() {
|
|
Packit |
bbb0ff |
local results='PASS WARN FAIL'
|
|
Packit |
bbb0ff |
[[ "$results" =~ $(echo "$__INTERNAL_PHASES_WORST_RESULT(.*)") ]] && {
|
|
Packit |
bbb0ff |
local possible_results="${BASH_REMATCH[1]}"
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): possible worse results are now $possible_results, current result is $1"
|
|
Packit |
bbb0ff |
[[ "$possible_results" =~ $1 ]] && {
|
|
Packit |
bbb0ff |
rlLogDebug "$FUNCNAME(): changing worst phase result from $__INTERNAL_PHASES_WORST_RESULT to $1"
|
|
Packit |
bbb0ff |
__INTERNAL_PHASES_WORST_RESULT="$1"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rljClosePhase(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
[[ $__INTERNAL_PHASE_OPEN -eq 0 ]] && {
|
|
Packit |
bbb0ff |
rlLogError "nothing to close - no open phase"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
local result
|
|
Packit |
bbb0ff |
local logfile="$BEAKERLIB_DIR/journal.txt"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local score=$__INTERNAL_PHASE_FAILED
|
|
Packit |
bbb0ff |
# Result
|
|
Packit |
bbb0ff |
if [ $score -eq 0 ]; then
|
|
Packit |
bbb0ff |
result="PASS"
|
|
Packit |
bbb0ff |
let __INTERNAL_PHASES_PASSED++
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
result="$__INTERNAL_PHASE_TYPE"
|
|
Packit |
bbb0ff |
let __INTERNAL_PHASES_FAILED++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_SET_WORST_PHASE_RESULT "$result"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local name="$__INTERNAL_PHASE_NAME"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rlLogDebug "rljClosePhase: Phase $name closed"
|
|
Packit |
bbb0ff |
__INTERNAL_SET_TIMESTAMP
|
|
Packit |
bbb0ff |
local endtime="$__INTERNAL_TIMESTAMP"
|
|
Packit |
b05e72 |
__INTERNAL_PrintFootLog $__INTERNAL_PHASE_STARTTIME \
|
|
Packit |
b05e72 |
$endtime \
|
|
Packit |
b05e72 |
Assertions \
|
|
Packit |
b05e72 |
$__INTERNAL_PHASE_PASSED \
|
|
Packit |
b05e72 |
$__INTERNAL_PHASE_FAILED \
|
|
Packit |
b05e72 |
$result
|
|
Packit |
bbb0ff |
local logfile="$(mktemp)"
|
|
Packit |
bbb0ff |
tail -n +$((__INTERNAL_PHASE_TXTLOG_START+1)) $__INTERNAL_BEAKERLIB_JOURNAL_TXT > $logfile
|
|
Packit |
93ed06 |
rlReport "$(echo "${name//[^[:alnum:]]/-}" | tr -s '-')" "$result" "$score" "$logfile"
|
|
Packit |
bbb0ff |
rm -f $logfile
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Reset of state variables
|
|
Packit |
5e1fe0 |
if [[ "$BEAKERLIB_NESTED_PHASES" == "0" ]]; then
|
|
Packit |
bbb0ff |
__INTERNAL_METAFILE_INDENT_LEVEL=1
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TYPE=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_NAME=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_FAILED=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_PASSED=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_STARTTIME=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_TXTLOG_START=()
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_METRICS=()
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
let __INTERNAL_METAFILE_INDENT_LEVEL--
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_TYPE[0]; __INTERNAL_PHASE_TYPE=( "${__INTERNAL_PHASE_TYPE[@]}" )
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_NAME[0]; __INTERNAL_PHASE_NAME=( "${__INTERNAL_PHASE_NAME[@]}" )
|
|
Packit |
bbb0ff |
[[ ${#__INTERNAL_PHASE_FAILED[@]} -gt 1 ]] && let __INTERNAL_PHASE_FAILED[1]+=__INTERNAL_PHASE_FAILED[0]
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_FAILED[0]; __INTERNAL_PHASE_FAILED=( "${__INTERNAL_PHASE_FAILED[@]}" )
|
|
Packit |
bbb0ff |
[[ ${#__INTERNAL_PHASE_PASSED[@]} -gt 1 ]] && let __INTERNAL_PHASE_PASSED[1]+=__INTERNAL_PHASE_PASSED[0]
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_PASSED[0]; __INTERNAL_PHASE_PASSED=( "${__INTERNAL_PHASE_PASSED[@]}" )
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_STARTTIME[0]; __INTERNAL_PHASE_STARTTIME=( "${__INTERNAL_PHASE_STARTTIME[@]}" )
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_TXTLOG_START[0]; __INTERNAL_PHASE_TXTLOG_START=( "${__INTERNAL_PHASE_TXTLOG_START[@]}" )
|
|
Packit |
bbb0ff |
unset __INTERNAL_PHASE_METRICS[0]; __INTERNAL_PHASE_METRICS=( "${__INTERNAL_PHASE_METRICS[@]}" )
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_OPEN=${#__INTERNAL_PHASE_NAME[@]}
|
|
Packit |
bbb0ff |
# Updating phase element
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile --result "$result" --score "$score"
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# $1 message
|
|
Packit |
bbb0ff |
# $2 result
|
|
Packit |
bbb0ff |
# $3 command
|
|
Packit |
bbb0ff |
rljAddTest(){
|
|
Packit |
62c285 |
local IFS
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
if [ $__INTERNAL_PHASE_OPEN -eq 0 ]; then
|
|
Packit |
bbb0ff |
rlPhaseStart "FAIL" "Asserts collected outside of a phase"
|
|
Packit |
bbb0ff |
rlFail "TEST BUG: Assertion not in phase"
|
|
Packit |
bbb0ff |
rljAddTest "$@"
|
|
Packit |
bbb0ff |
rlPhaseEnd
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "$1" "$2"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile test --message "$1" ${3:+--command "$3"} -- "$2" >&2
|
|
Packit |
bbb0ff |
if [ "$2" == "PASS" ]; then
|
|
Packit |
bbb0ff |
let __INTERNAL_PHASE_PASSED++
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
let __INTERNAL_TEST_STATE++
|
|
Packit |
bbb0ff |
let __INTERNAL_PHASE_FAILED++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rljAddMetric(){
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad
|
|
Packit |
bbb0ff |
local MID="$2"
|
|
Packit |
bbb0ff |
local VALUE="$3"
|
|
Packit |
bbb0ff |
local TOLERANCE=${4:-"0.2"}
|
|
Packit |
bbb0ff |
local res=0
|
|
Packit |
bbb0ff |
if [ "$MID" == "" ] || [ "$VALUE" == "" ]
|
|
Packit |
bbb0ff |
then
|
|
Packit |
bbb0ff |
rlLogError "TEST BUG: Bad call of rlLogMetric"
|
|
Packit |
bbb0ff |
return 1
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
if [[ "$__INTERNAL_PHASE_METRICS" =~ \ $MID\ ]]; then
|
|
Packit |
bbb0ff |
rlLogError "$FUNCNAME: Metric name not unique!"
|
|
Packit |
bbb0ff |
let res++
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
rlLogDebug "rljAddMetric: Storing metric $MID with value $VALUE and tolerance $TOLERANCE"
|
|
Packit |
bbb0ff |
__INTERNAL_PHASE_METRICS="$__INTERNAL_PHASE_METRICS $MID "
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile metric --type "$1" --name "$MID" \
|
|
Packit |
bbb0ff |
--value "$VALUE" --tolerance "$TOLERANCE" >&2 || let res++
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
return $?
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rljAddMessage(){
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile message --severity "$2" -- "$1" >&2
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_GetPackageDetails() {
|
|
Packit |
bbb0ff |
rpm -q "$1" --qf "%{name}-%{version}-%{release}.%{arch} %{sourcerpm}"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
rljRpmLog(){
|
|
Packit |
bbb0ff |
local package_details
|
|
Packit |
bbb0ff |
if package_details=( $(__INTERNAL_GetPackageDetails "$1") ); then
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile pkgdetails --sourcerpm "${package_details[1]}" -- "${package_details[0]}"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile pkgnotinstalled -- "$1"
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# determine SUT package
|
|
Packit |
bbb0ff |
__INTERNAL_DeterminePackage(){
|
|
Packit |
bbb0ff |
local package="$PACKAGE"
|
|
Packit |
bbb0ff |
if [ "$PACKAGE" == "" ]; then
|
|
Packit |
bbb0ff |
if [ "$TEST" == "" ]; then
|
|
Packit |
bbb0ff |
package="unknown"
|
|
Packit |
bbb0ff |
else
|
|
Packit |
bbb0ff |
local arrPac=(${TEST//// })
|
|
Packit |
bbb0ff |
package=${arrPac[1]}
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
echo "$package"
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Creates header
|
|
Packit |
bbb0ff |
__INTERNAL_CreateHeader(){
|
|
Packit |
62c285 |
local IFS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_PrintHeadLog "TEST PROTOCOL" 2> /dev/null
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ -n "$TESTID" ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile test_id -- "$TESTID"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test run ID : $TESTID" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Determine package which is tested
|
|
Packit |
bbb0ff |
local package=$(__INTERNAL_DeterminePackage)
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile package -- "$package"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Package : $package" 2> /dev/null
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Write package details (rpm, srcrpm) into metafile
|
|
Packit |
bbb0ff |
rljRpmLog "$package"
|
|
Packit |
bbb0ff |
package=( $(__INTERNAL_GetPackageDetails "$package") ) && \
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Installed : ${package[0]}" 2> /dev/null
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# RPM version of beakerlib
|
|
Packit |
bbb0ff |
package=( $(__INTERNAL_GetPackageDetails "beakerlib") ) && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile beakerlib_rpm -- "${package[0]}"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " beakerlib RPM : ${package[0]}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# RPM version of beakerlib-redhat
|
|
Packit |
bbb0ff |
package=( $(__INTERNAL_GetPackageDetails "beakerlib-redhat") ) && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile beakerlib_redhat_rpm -- "${package[0]}"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " bl-redhat RPM : ${package[0]}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local test_version="${testversion:-$TESTVERSION}"
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ -n "$test_version" ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile testversion -- "$test_version"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test version : $test_version" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
package="${packagename:-$test_version}"
|
|
Packit |
bbb0ff |
local test_built
|
|
Packit |
bbb0ff |
[[ -n "$package" ]] && test_built=$(rpm -q --qf '%{BUILDTIME}\n' $package) && {
|
|
Packit |
827126 |
test_built="$(echo "$test_built" | head -n 1 )"
|
|
Packit |
bbb0ff |
printf -v test_built "%($__INTERNAL_TIMEFORMAT_LONG)T" "$test_built"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile testversion -- "$test_built"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test built : $test_built" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Starttime and endtime
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile starttime
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile endtime
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test started : $(printf "%($__INTERNAL_TIMEFORMAT_LONG)T" $__INTERNAL_STARTTIME)" 2> /dev/null
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test finished : " 2> /dev/null
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Test duration : " 2> /dev/null
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Test name
|
|
Packit |
6e11fd |
__INTERNAL_TEST_NAME="${TEST:-unknown}"
|
|
Packit |
6e11fd |
__INTERNAL_WriteToMetafile testname -- "${__INTERNAL_TEST_NAME}"
|
|
Packit |
6e11fd |
__INTERNAL_LogText " Test name : ${__INTERNAL_TEST_NAME}" 2> /dev/null
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# OS release
|
|
Packit |
bbb0ff |
local release=$(cat /etc/redhat-release)
|
|
Packit |
bbb0ff |
[[ -n "$release" ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile release -- "$release"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Distro : ${release}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Hostname
|
|
Packit |
bbb0ff |
local hostname=""
|
|
Packit |
bbb0ff |
# Try hostname command or /etc/hostname if both fail skip it
|
|
Packit |
bbb0ff |
if which hostname &> /dev/null; then
|
|
Packit |
bbb0ff |
hostname=$(hostname --fqdn)
|
|
Packit |
bbb0ff |
elif [[ -f "/etc/hostname" ]]; then
|
|
Packit |
bbb0ff |
hostname=$(cat /etc/hostname)
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ -n "$hostname" ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile hostname -- "$hostname"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Hostname : ${hostname}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Architecture
|
|
Packit |
bbb0ff |
local arch=$(uname -i 2>/dev/null || uname -m)
|
|
Packit |
bbb0ff |
[[ -n "$arch" ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile arch -- "$arch"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " Architecture : ${arch}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
local line size
|
|
Packit |
bbb0ff |
# CPU info
|
|
Packit |
bbb0ff |
if [ -f "/proc/cpuinfo" ]; then
|
|
Packit |
bbb0ff |
local count=0
|
|
Packit |
bbb0ff |
local type="unknown"
|
|
Packit |
bbb0ff |
local cpu_regex="^model\sname.*: (.*)$"
|
|
Packit |
62c285 |
while read -r line; do
|
|
Packit |
bbb0ff |
if [[ "$line" =~ $cpu_regex ]]; then
|
|
Packit |
bbb0ff |
type="${BASH_REMATCH[1]}"
|
|
Packit |
bbb0ff |
let count++
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done < "/proc/cpuinfo"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile hw_cpu -- "$count x $type"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " CPUs : $count x $type" 2> /dev/null
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# RAM size
|
|
Packit |
bbb0ff |
if [[ -f "/proc/meminfo" ]]; then
|
|
Packit |
bbb0ff |
size=0
|
|
Packit |
bbb0ff |
local ram_regex="^MemTotal: *(.*) kB$"
|
|
Packit |
62c285 |
while read -r line; do
|
|
Packit |
bbb0ff |
if [[ "$line" =~ $ram_regex ]]; then
|
|
Packit |
bbb0ff |
size=`expr ${BASH_REMATCH[1]} / 1024`
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done < "/proc/meminfo"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile hw_ram -- "$size MB"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " RAM size : ${size} MB" 2> /dev/null
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# HDD size
|
|
Packit |
bbb0ff |
size=0
|
|
Packit |
bbb0ff |
local hdd_regex="^(/[^ ]+) +([0-9]+) +[0-9]+ +[0-9]+ +[0-9]+% +[^ ]+$"
|
|
Packit |
bbb0ff |
while read -r line ; do
|
|
Packit |
bbb0ff |
if [[ "$line" =~ $hdd_regex ]]; then
|
|
Packit |
bbb0ff |
let size+=BASH_REMATCH[2]
|
|
Packit |
bbb0ff |
fi
|
|
Packit |
bbb0ff |
done < <(df -k -P --local --exclude-type=tmpfs)
|
|
Packit |
bbb0ff |
[[ -n "$size" ]] && {
|
|
Packit |
bbb0ff |
size="$(echo "$((size*100/1024/1024))" | sed -r 's/..$/.\0/') GB"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile hw_hdd -- "$size"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText " HDD size : ${size}" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Purpose
|
|
Packit |
bbb0ff |
[[ -f 'PURPOSE' ]] && {
|
|
Packit |
bbb0ff |
local purpose tmp
|
|
Packit |
bbb0ff |
mapfile -t tmp < PURPOSE
|
|
Packit |
bbb0ff |
printf -v purpose "%s\n" "${tmp[@]}"
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile purpose -- "$purpose"
|
|
Packit |
bbb0ff |
__INTERNAL_PrintHeadLog "Test description" 2> /dev/null
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "$purpose" 2> /dev/null
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
return 0
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_SET_TIMESTAMP() {
|
|
Packit |
bbb0ff |
printf -v __INTERNAL_TIMESTAMP '%(%s)T' -1
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# Encode arguments' values into base64
|
|
Packit |
bbb0ff |
# Adds --timestamp argument and indent
|
|
Packit |
bbb0ff |
# writes it into metafile
|
|
Packit |
bbb0ff |
# takes [element] --attribute1 value1 --attribute2 value2 .. [-- "content"]
|
|
Packit |
bbb0ff |
__INTERNAL_WriteToMetafile(){
|
|
Packit |
bbb0ff |
__INTERNAL_SET_TIMESTAMP
|
|
Packit |
bbb0ff |
local indent
|
|
Packit |
bbb0ff |
local line=""
|
|
Packit |
bbb0ff |
local lineraw=''
|
|
Packit |
bbb0ff |
local ARGS=("$@")
|
|
Packit |
bbb0ff |
local element=''
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
[[ "${1:0:2}" != "--" ]] && {
|
|
Packit |
bbb0ff |
local element="$1"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
local arg
|
|
Packit |
bbb0ff |
while [[ $# -gt 0 ]]; do
|
|
Packit |
bbb0ff |
case $1 in
|
|
Packit |
bbb0ff |
--)
|
|
Packit |
bbb0ff |
line+=" -- \"$(echo -n "$2" | base64 -w 0)\""
|
|
Packit |
bbb0ff |
printf -v lineraw "%s -- %q" "$lineraw" "$2"
|
|
Packit |
bbb0ff |
shift 2
|
|
Packit |
bbb0ff |
break
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
--*)
|
|
Packit |
bbb0ff |
line+=" $1=\"$(echo -n "$2" | base64 -w 0)\""
|
|
Packit |
bbb0ff |
printf -v lineraw "%s %s=%q" "$lineraw" "$1" "$2"
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
*)
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "unexpected meta input format"
|
|
Packit |
bbb0ff |
set | grep ^ARGS=
|
|
Packit |
bbb0ff |
exit 124
|
|
Packit |
bbb0ff |
;;
|
|
Packit |
bbb0ff |
esac
|
|
Packit |
bbb0ff |
shift
|
|
Packit |
bbb0ff |
done
|
|
Packit |
bbb0ff |
[[ $# -gt 0 ]] && {
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "unexpected meta input format"
|
|
Packit |
bbb0ff |
set | grep ^ARGS=
|
|
Packit |
bbb0ff |
exit 125
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
printf -v indent '%*s' $__INTERNAL_METAFILE_INDENT_LEVEL
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
line="$indent${element:+$element }--timestamp=\"${__INTERNAL_TIMESTAMP}\"$line"
|
|
Packit |
bbb0ff |
lineraw="$indent${element:+$element }--timestamp=\"${__INTERNAL_TIMESTAMP}\"$lineraw"
|
|
Packit |
ffe333 |
[[ -n "$DEBUG" ]] && echo "#${lineraw:1}" >> $__INTERNAL_BEAKERLIB_METAFILE
|
|
Packit |
bbb0ff |
echo "$line" >> $__INTERNAL_BEAKERLIB_METAFILE
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_PrintHeadLog() {
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText ":: $1"
|
|
Packit |
bbb0ff |
__INTERNAL_LogText "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
|
|
Packit |
b05e72 |
# $1 - start time
|
|
Packit |
b05e72 |
# $2 - end time
|
|
Packit |
b05e72 |
# $3 - stat name
|
|
Packit |
b05e72 |
# $4 - stat good
|
|
Packit |
b05e72 |
# $5 - stat bad
|
|
Packit |
b05e72 |
# $6 - result
|
|
Packit |
b05e72 |
# $7 - result prefix '<PREFIX> RESULT: <RESULT>'
|
|
Packit |
b05e72 |
__INTERNAL_PrintFootLog(){
|
|
Packit |
b05e72 |
local result_colored
|
|
Packit |
b05e72 |
local starttime="$1"
|
|
Packit |
b05e72 |
local endtime="$2"
|
|
Packit |
b05e72 |
local stat_name="$3"
|
|
Packit |
b05e72 |
local stat_good="$4"
|
|
Packit |
b05e72 |
local stat_bad="$5"
|
|
Packit |
b05e72 |
local result="$6"
|
|
Packit |
b05e72 |
local result_pref="$7"
|
|
Packit |
b05e72 |
[[ -n "$result_pref" ]] && result_pref+=" "
|
|
Packit |
b05e72 |
__INTERNAL_colorize_prio "$result" result_colored
|
|
Packit |
b05e72 |
__INTERNAL_LogText "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
|
|
Packit |
b05e72 |
__INTERNAL_LogText ":: Duration: $((endtime - starttime))s"
|
|
Packit |
b05e72 |
__INTERNAL_LogText ":: $stat_name: $stat_good good, $stat_bad bad"
|
|
Packit |
b05e72 |
__INTERNAL_LogText ":: ${result_pref}RESULT: $result" '' '' \
|
|
Packit |
b05e72 |
":: ${result_pref}RESULT: $result_colored"
|
|
Packit |
b05e72 |
__INTERNAL_LogText ''
|
|
Packit |
b05e72 |
}
|
|
Packit |
b05e72 |
|
|
Packit |
b05e72 |
|
|
Packit |
c623bd |
# whenever any of the persistent variable is touched,
|
|
Packit |
bbb0ff |
# functions __INTERNAL_PersistentDataLoad and __INTERNAL_PersistentDataSave
|
|
Packit |
bbb0ff |
# should be called before and after that respectively.
|
|
Packit |
bbb0ff |
|
|
Packit |
dc97bb |
__INTERNAL_PersistentDataSave_sed='s/^declare/\0 -g/'
|
|
Packit |
dc97bb |
# ugly workaround for bash-4.1.2 and older, where -g does not exist
|
|
Packit |
dc97bb |
# there might be an issue when there's a line break in the variables and there's
|
|
Packit |
dc97bb |
# "")'" or "()'" at the end of the line. This should not never happen, the worst
|
|
Packit |
dc97bb |
# case might happen in the phase name but is is not expected to contain line
|
|
Packit |
dc97bb |
# breaks
|
|
Packit |
dc97bb |
declare -g &> /dev/null || __INTERNAL_PersistentDataSave_sed="s/(^declare -a[^=]+=)'\(/\1(/;s/([\"(]\))'$/\1/;s/declare\s+\S+\s+([^=]+=)/\1/"
|
|
Packit |
dc97bb |
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataSave() {
|
|
Packit |
dc97bb |
declare -p \
|
|
Packit |
dc97bb |
__INTERNAL_STARTTIME \
|
|
Packit |
dc97bb |
__INTERNAL_TEST_STATE \
|
|
Packit |
dc97bb |
__INTERNAL_PHASES_PASSED \
|
|
Packit |
dc97bb |
__INTERNAL_PHASES_FAILED \
|
|
Packit |
dc97bb |
__INTERNAL_PHASES_SKIPPED \
|
|
Packit |
dc97bb |
__INTERNAL_JOURNAL_OPEN \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_OPEN \
|
|
Packit |
dc97bb |
__INTERNAL_PHASES_WORST_RESULT \
|
|
Packit |
dc97bb |
__INTERNAL_METAFILE_INDENT_LEVEL \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_TYPE \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_NAME \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_FAILED \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_PASSED \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_STARTTIME \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_TXTLOG_START \
|
|
Packit |
dc97bb |
__INTERNAL_PHASE_METRICS \
|
|
Packit |
dc97bb |
__INTERNAL_TEST_NAME \
|
|
Packit |
dc97bb |
| sed -r "$__INTERNAL_PersistentDataSave_sed" > "$__INTERNAL_PERSISTENT_DATA"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
__INTERNAL_PersistentDataLoad() {
|
|
Packit |
c623bd |
[[ -r "$__INTERNAL_PERSISTENT_DATA" ]] && . "$__INTERNAL_PERSISTENT_DATA"
|
|
Packit |
bbb0ff |
}
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
# AUTHORS
|
|
Packit |
bbb0ff |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
Packit |
bbb0ff |
: <<'=cut'
|
|
Packit |
bbb0ff |
=pod
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=head1 AUTHORS
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=over
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Petr Muller <pmuller@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Jan Hutar <jhutar@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Ales Zelinka <azelinka@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Petr Splichal <psplicha@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Dalibor Pospisil <dapospis@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=item *
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
Jakub Heger <jheger@redhat.com>
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=back
|
|
Packit |
bbb0ff |
|
|
Packit |
bbb0ff |
=cut
|