Blame src/logging.sh

Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
#
Packit bbb0ff
#   Name: logging.sh - part of the BeakerLib project
Packit bbb0ff
#   Description: Phases, logging & metrics related stuff
Packit bbb0ff
#
Packit bbb0ff
#   Author: Chris Ward <cward@redhat.com>
Packit bbb0ff
#   Author: Ondrej Hudlicky <ohudlick@redhat.com>
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
export __INTERNAL_DEFAULT_SUBMIT_LOG=__INTERNAL_FileSubmit
Packit bbb0ff
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head1 NAME
Packit bbb0ff
Packit bbb0ff
BeakerLib - logging - phase support, logging functions and metrics
Packit bbb0ff
Packit bbb0ff
=head1 DESCRIPTION
Packit bbb0ff
Packit bbb0ff
Routines for creating various types of logs inside BeakerLib tests.
Packit bbb0ff
Implements also phase support with automatic assert evaluation.
Packit bbb0ff
Packit bbb0ff
=head1 FUNCTIONS
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# Internal Stuff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
Packit bbb0ff
__INTERNAL_PrintText() {
Packit bbb0ff
  local tmp="$__INTERNAL_LogText_no_file"
Packit bbb0ff
  __INTERNAL_LogText_no_file=1
Packit bbb0ff
  __INTERNAL_LogText "$@"
Packit bbb0ff
  __INTERNAL_LogText_no_file=$tmp
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
__INTERNAL_LogText() {
Packit bbb0ff
    local MESSAGE="$1"
Packit bbb0ff
    local MESSAGE_COLORED="${MESSAGE}"
Packit bbb0ff
    local prio="$2"
Packit bbb0ff
    local LOGFILE=${3:-$OUTPUTFILE}
Packit bbb0ff
    local res=0
Packit bbb0ff
    local COLOR='' UNCOLOR=''
Packit bbb0ff
    if [[ -t 2 ]]; then
Packit bbb0ff
      UNCOLOR="$__INTERNAL_color_reset"
Packit bbb0ff
      case ${prio^^} in
Packit bbb0ff
        DEBUG*)
Packit bbb0ff
          COLOR="$__INTERNAL_color_purple"
Packit bbb0ff
          ;;
Packit bbb0ff
        PASS)
Packit bbb0ff
          COLOR="$__INTERNAL_color_green"
Packit bbb0ff
          ;;
Packit bbb0ff
        FAIL|FATAL)
Packit bbb0ff
          COLOR="$__INTERNAL_color_light_red"
Packit bbb0ff
          ;;
Packit bbb0ff
        LOG)
Packit bbb0ff
          COLOR="$__INTERNAL_color_cyan"
Packit bbb0ff
          ;;
Packit bbb0ff
        LOG|INFO|BEGIN)
Packit bbb0ff
          COLOR="$__INTERNAL_color_blue"
Packit bbb0ff
          ;;
Packit bbb0ff
        WARN*|SKIP*)
Packit bbb0ff
          COLOR="$__INTERNAL_color_yellow"
Packit bbb0ff
          ;;
Packit bbb0ff
      esac
Packit bbb0ff
    fi
Packit bbb0ff
    [[ -n "$prio" ]] && {
Packit bbb0ff
      local left=$(( (10+${#prio})/2 ))
Packit bbb0ff
      local prefix prefix_colored timestamp
Packit bbb0ff
      __INTERNAL_SET_TIMESTAMP
Packit bbb0ff
      printf -v timestamp "%($__INTERNAL_TIMEFORMAT_SHORT)T" "$__INTERNAL_TIMESTAMP"
Packit bbb0ff
      printf -v prefix_colored ":: [ %s ] :: [%s%*s%*s%s] ::"  "$timestamp" "$COLOR" "$left" "${prio}" "$(( 10-$left ))" '' "$UNCOLOR"
Packit bbb0ff
      printf -v prefix ":: [ %s ] :: [%*s%*s] ::"  "$timestamp" "$left" "${prio}" "$(( 10-$left ))"
Packit bbb0ff
      MESSAGE="$prefix $MESSAGE"
Packit bbb0ff
      MESSAGE_COLORED="$prefix_colored $MESSAGE_COLORED"
Packit bbb0ff
    }
Packit bbb0ff
    if [[ -z "$__INTERNAL_LogText_no_file" ]]; then
Packit bbb0ff
      if [[ -n "$LOGFILE" ]]; then
Packit bbb0ff
        echo -e "${MESSAGE}" >> $LOGFILE || let res++
Packit bbb0ff
      fi
Packit bbb0ff
      echo -e "${MESSAGE}" >> "$__INTERNAL_BEAKERLIB_JOURNAL_TXT" || let res++
Packit bbb0ff
      echo -e "${MESSAGE_COLORED}" >> "$__INTERNAL_BEAKERLIB_JOURNAL_COLORED" || let res++
Packit bbb0ff
    fi
Packit bbb0ff
    echo -e "${MESSAGE_COLORED}" >&2 || let res++
Packit bbb0ff
    return $res
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
__INTERNAL_FileSubmit() {
Packit bbb0ff
    local FILENAME="$4"
Packit bbb0ff
    local STORENAME="$__INTERNAL_PERSISTENT_TMP/BEAKERLIB_${TESTID}_STORED_$(basename $FILENAME)"
Packit bbb0ff
    if [ -z "$TESTID" ]
Packit bbb0ff
    then
Packit bbb0ff
        STORENAME="$__INTERNAL_PERSISTENT_TMP/BEAKERLIB_STORED_$(basename $FILENAME)"
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    rlLog "File '$FILENAME' stored here: $STORENAME"
Packit bbb0ff
    cp -f "$FILENAME" "$STORENAME"
Packit bbb0ff
    return $?
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlLog*
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head2 Logging
Packit bbb0ff
Packit bbb0ff
=head3 rlLog
Packit bbb0ff
Packit bbb0ff
=head3 rlLogDebug
Packit bbb0ff
Packit bbb0ff
=head3 rlLogInfo
Packit bbb0ff
Packit bbb0ff
=head3 rlLogWarning
Packit bbb0ff
Packit bbb0ff
=head3 rlLogError
Packit bbb0ff
Packit bbb0ff
=head3 rlLogFatal
Packit bbb0ff
Packit bbb0ff
Create a time/priority-labelled message in the log. There is a bunch of aliases
Packit bbb0ff
which can create messages formated as DEBUG/INFO/WARNING/ERROR or FATAL (but you
Packit bbb0ff
would probably want to use rlDie instead of the last one).
Packit bbb0ff
Packit bbb0ff
    rlLog message [logfile] [priority] [label]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item message
Packit bbb0ff
Packit bbb0ff
Message you want to show (use quotes when invoking).
Packit bbb0ff
Packit bbb0ff
=item logfile
Packit bbb0ff
Packit bbb0ff
Log file. If not supplied, OUTPUTFILE is assumed.
Packit bbb0ff
Packit bbb0ff
=item priority
Packit bbb0ff
Packit bbb0ff
Priority of the log.
Packit bbb0ff
Packit bbb0ff
=item label
Packit bbb0ff
Packit bbb0ff
Print this text instead of time in log label.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
__INTERNAL_color_set() {
Packit bbb0ff
  local T="$TERM"
Packit bbb0ff
  [[ -t 1 ]] || T=""
Packit bbb0ff
  [[ -t 2 ]] || T=""
Packit bbb0ff
  case $T in
Packit bbb0ff
    xterm*|screen|linux)
Packit bbb0ff
      __INTERNAL_color_black="\e[0;30m"
Packit bbb0ff
      __INTERNAL_color_dark_gray="\e[1;30m"
Packit bbb0ff
      __INTERNAL_color_red="\e[0;31m"
Packit bbb0ff
      __INTERNAL_color_light_red="\e[1;31m"
Packit bbb0ff
      __INTERNAL_color_green="\e[0;32m"
Packit bbb0ff
      __INTERNAL_color_light_green="\e[1;32m"
Packit bbb0ff
      __INTERNAL_color_yellow="\e[0;33m"
Packit bbb0ff
      __INTERNAL_color_light_yellow="\e[1;33m"
Packit bbb0ff
      __INTERNAL_color_blue="\e[0;34m"
Packit bbb0ff
      __INTERNAL_color_light_blue="\e[1;34m"
Packit bbb0ff
      __INTERNAL_color_purple="\e[0;35m"
Packit bbb0ff
      __INTERNAL_color_light_purple="\e[1;35m"
Packit bbb0ff
      __INTERNAL_color_cyan="\e[0;36m"
Packit bbb0ff
      __INTERNAL_color_light_cyan="\e[1;36m"
Packit bbb0ff
      __INTERNAL_color_light_gray="\e[0;37m"
Packit bbb0ff
      __INTERNAL_color_white="\e[1;37m"
Packit bbb0ff
      __INTERNAL_color_reset="\e[00m"
Packit bbb0ff
    ;;
Packit bbb0ff
    * )
Packit bbb0ff
      __INTERNAL_color_black=""
Packit bbb0ff
      __INTERNAL_color_dark_gray=""
Packit bbb0ff
      __INTERNAL_color_red=""
Packit bbb0ff
      __INTERNAL_color_light_red=""
Packit bbb0ff
      __INTERNAL_color_green=""
Packit bbb0ff
      __INTERNAL_color_light_green=""
Packit bbb0ff
      __INTERNAL_color_brown=""
Packit bbb0ff
      __INTERNAL_color_yellow=""
Packit bbb0ff
      __INTERNAL_color_blue=""
Packit bbb0ff
      __INTERNAL_color_light_blue=""
Packit bbb0ff
      __INTERNAL_color_purple=""
Packit bbb0ff
      __INTERNAL_color_light_purple=""
Packit bbb0ff
      __INTERNAL_color_cyan=""
Packit bbb0ff
      __INTERNAL_color_light_cyan=""
Packit bbb0ff
      __INTERNAL_color_light_gray=""
Packit bbb0ff
      __INTERNAL_color_white=""
Packit bbb0ff
      __INTERNAL_color_reset=""
Packit bbb0ff
    ;;
Packit bbb0ff
  esac
Packit bbb0ff
}
Packit bbb0ff
__INTERNAL_color_set
Packit bbb0ff
Packit bbb0ff
__INTERNAL_CenterText() {
Packit bbb0ff
  local text="$1"
Packit bbb0ff
  local left=$(( ($2+${#text})/2 ))
Packit bbb0ff
  printf "%*s%*s" $left "${text}" $(( $2-$left ))
Packit bbb0ff
}; # end of __INTERNAL_CenterText
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
rlLog() {
Packit bbb0ff
    local message="$1"
Packit bbb0ff
    local logfile="$2"
Packit bbb0ff
    local prio="${3:-LOG}"
Packit bbb0ff
    __INTERNAL_LogText "$message" "$prio" "$logfile"
Packit bbb0ff
    rljAddMessage "$message" "$prio"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
LOG_LEVEL=${LOG_LEVEL:-""}
Packit bbb0ff
DEBUG=${DEBUG:-""}
Packit bbb0ff
Packit bbb0ff
rlLogDebug() {
Packit bbb0ff
  if [ "$DEBUG" == 'true' -o "$DEBUG" == '1' -o "$LOG_LEVEL" == "DEBUG" ]; then
Packit bbb0ff
    rlLog "$1" "$2" "DEBUG" && rljAddMessage "$1" "DEBUG"
Packit bbb0ff
  fi
Packit bbb0ff
}
Packit bbb0ff
rlLogInfo()    { rlLog "$1" "$2" "INFO"; }
Packit bbb0ff
rlLogWarning() { rlLog "$1" "$2" "WARNING"; }
Packit bbb0ff
rlLogError()   { rlLog "$1" "$2" "ERROR"; }
Packit bbb0ff
rlLogFatal()   { rlLog "$1" "$2" "FATAL"; }
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlDie
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlDie
Packit bbb0ff
Packit bbb0ff
Create a time-labelled message in the log, report test result,
Packit bbb0ff
upload logs, close unfinished phase and terminate the test.
Packit bbb0ff
Packit bbb0ff
    rlDie message [file...]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item message
Packit bbb0ff
Packit bbb0ff
Message you want to show (use quotes when invoking) - this
Packit bbb0ff
option is mandatory.
Packit bbb0ff
Packit bbb0ff
=item file
Packit bbb0ff
Packit bbb0ff
Files (logs) you want to upload as well. C<rlBundleLogs>
Packit bbb0ff
will be used for it. Files which are not readable will be
Packit bbb0ff
excluded before calling C<rlBundleLogs>, so it is safe to
Packit bbb0ff
call even with possibly not existent logs and it will
Packit bbb0ff
succeed.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlDie() {
Packit bbb0ff
    # handle mandatory comment
Packit bbb0ff
    local rlMSG="$1"
Packit bbb0ff
    shift
Packit bbb0ff
    # handle optional list of logs
Packit bbb0ff
    if [ -n "$*" ]; then
Packit bbb0ff
        local logs=''
Packit bbb0ff
Packit bbb0ff
        local log
Packit bbb0ff
        for log in "$@"; do
Packit bbb0ff
            [ -r "$log" ] && logs="$logs $log"
Packit bbb0ff
        done
Packit bbb0ff
Packit bbb0ff
        [ -n "$logs" ] && rlBundleLogs rlDieLogsBundling $logs
Packit bbb0ff
    fi
Packit bbb0ff
    # do the work
Packit bbb0ff
    rlLogFatal "$rlMSG"
Packit bbb0ff
    rlAssert0 "$rlMSG" 1
Packit bbb0ff
    rlPhaseEnd
Packit bbb0ff
    exit 0
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlHeadLog
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# obsoleted by phases
Packit bbb0ff
# : <<=cut
Packit bbb0ff
# =pod
Packit bbb0ff
#
Packit bbb0ff
# =head2 rlHeadLog
Packit bbb0ff
#
Packit bbb0ff
# Creates a header in the supplied log
Packit bbb0ff
#
Packit bbb0ff
#  * parameter 1: message you want to show (use quotes when invoking)
Packit bbb0ff
#  * optional parameter 2: log file. If not supplied, OUTPUTFILE is assumed
Packit bbb0ff
# =cut
Packit bbb0ff
Packit bbb0ff
rlHeadLog() {
Packit bbb0ff
    local text="$1"
Packit bbb0ff
    local logfile=${2:-""}
Packit bbb0ff
    __INTERNAL_LogText "\n::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" "$logfile"
Packit bbb0ff
    rlLog "$text" "$logfile"
Packit bbb0ff
    __INTERNAL_LogText "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n" "$logfile"
Packit bbb0ff
    rlLogWarning "rlHeadLog is obsoleted, use rlPhase* instead"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlBundleLogs
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlBundleLogs
Packit bbb0ff
Packit bbb0ff
Create a tarball of files (e.g. logs) and attach them to the test result.
Packit bbb0ff
Packit bbb0ff
    rlBundleLogs package file [file...]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item package
Packit bbb0ff
Packit bbb0ff
Name of the package. Will be used as a part of the tar-ball name.
Packit bbb0ff
Packit bbb0ff
=item file
Packit bbb0ff
Packit bbb0ff
File(s) to be packed and submitted.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
Returns result of submiting the tarball.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlBundleLogs(){
Packit bbb0ff
    local BASENAME="$1"
Packit bbb0ff
    local LOGDIR="/tmp/$BASENAME" # no-reboot
Packit bbb0ff
Packit bbb0ff
    if [ -n "$JOBID" ]
Packit bbb0ff
    then
Packit bbb0ff
      LOGDIR="$LOGDIR-$JOBID"
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    if [ -n "$RECIPEID" ]
Packit bbb0ff
    then
Packit bbb0ff
      LOGDIR="$LOGDIR-$RECIPEID"
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    if [ -n "$TESTID" ]
Packit bbb0ff
    then
Packit bbb0ff
      LOGDIR="$LOGDIR-$TESTID"
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    rlLog "Bundling logs"
Packit bbb0ff
Packit bbb0ff
    rlLogDebug "rlBundleLogs: Creating directory for logs: $LOGDIR"
Packit bbb0ff
    mkdir -p "$LOGDIR"
Packit bbb0ff
Packit bbb0ff
    local i
Packit bbb0ff
    for i in "${@:2}"; do
Packit bbb0ff
        local i_new="$( echo $i | sed 's|[/ ]|_|g' )"
Packit bbb0ff
        while [ -e "$LOGDIR/$i_new" ]; do
Packit bbb0ff
            i_new="${i_new}_next"
Packit bbb0ff
        done
Packit bbb0ff
        rlLogInfo "rlBundleLogs: Adding '$i' as '$i_new'"
Packit bbb0ff
        cp -r "$i" "$LOGDIR/$i_new"
Packit bbb0ff
        [ $? -eq 0 ] || rlLogError "rlBundleLogs: '$i' can't be packed"
Packit bbb0ff
    done
Packit bbb0ff
Packit bbb0ff
    local TARBALL="$LOGDIR.tar.gz"
Packit bbb0ff
    tar zcf "$TARBALL" "$LOGDIR"
Packit bbb0ff
    if [ ! $? -eq 0 ]; then
Packit bbb0ff
        rlLogError "rlBundleLogs: Packing was not successful"
Packit bbb0ff
        return 1
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    rlFileSubmit "$TARBALL"
Packit bbb0ff
    SUBMITCODE=$?
Packit bbb0ff
Packit bbb0ff
    if [ ! $SUBMITCODE -eq 0 ]; then
Packit bbb0ff
        rlLogError "rlBundleLog: Submit wasn't successful"
Packit bbb0ff
    fi
Packit bbb0ff
    rlLogDebug "rlBundleLogs: Removing tmp: $TARBALL"
Packit bbb0ff
    rm -rf $TARBALL
Packit bbb0ff
    rlLogDebug "rlBundleLogs: Removing tmp: $LOGDIR"
Packit bbb0ff
    rm -rf $LOGDIR
Packit bbb0ff
Packit bbb0ff
    return $SUBMITCODE
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlFileSubmit
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlFileSubmit
Packit bbb0ff
Packit bbb0ff
Resolves absolute path to the file, replaces / for - and uploads this renamed
Packit bbb0ff
file using rhts-submit-log.
Packit bbb0ff
It also allows you to specify your custom name for the uploaded file.
Packit bbb0ff
Packit bbb0ff
    rlFileSubmit [-s sep] path_to_file [required_name]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item -s sep
Packit bbb0ff
Packit bbb0ff
Sets separator (i.e. the replacement of the /) to sep.
Packit bbb0ff
Packit bbb0ff
=item path_to_file
Packit bbb0ff
Packit bbb0ff
Either absolute or relative path to file. Relative path is converted
Packit bbb0ff
to absolute.
Packit bbb0ff
Packit bbb0ff
=item required_name
Packit bbb0ff
Packit bbb0ff
Default behavior renames file to full_path_to_file with / replaced for -,
Packit bbb0ff
if this does not suit your needs, you can specify the name using this
Packit bbb0ff
option.
Packit bbb0ff
Packit bbb0ff
Examples:
Packit bbb0ff
Packit bbb0ff
rlFileSubmit logfile.txt -> logfile.txt
Packit bbb0ff
cd /etc; rlFileSubmit ./passwd -> etc-passwd
Packit bbb0ff
rlFileSubmit /etc/passwd -> etc-passwd
Packit bbb0ff
rlFileSubmit /etc/passwd my-top-secret_file -> my-top-secret-file
Packit bbb0ff
rlFileSubmit -s '_' /etc/passwd -> etc_passwd
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlFileSubmit() {
Packit bbb0ff
    GETOPT=$(getopt -q -o s: -- "$@")
Packit bbb0ff
    eval set -- "$GETOPT"
Packit bbb0ff
Packit bbb0ff
    SEPARATOR='-'
Packit bbb0ff
    while true ; do
Packit bbb0ff
        case "$1" in
Packit bbb0ff
            -s)
Packit bbb0ff
                SEPARATOR=$2;
Packit bbb0ff
                shift 2
Packit bbb0ff
                ;;
Packit bbb0ff
            --)  shift; break;;
Packit bbb0ff
            *)   shift;;
Packit bbb0ff
        esac
Packit bbb0ff
    done
Packit bbb0ff
Packit bbb0ff
    local RETVAL=255
Packit bbb0ff
    local FILE="$1"
Packit bbb0ff
    local ALIAS
Packit bbb0ff
    local TMPDIR="$(mktemp -d)" # no-reboot
Packit bbb0ff
    if [ -f "$FILE" ]; then
Packit bbb0ff
        if [ -n "$2" ]; then
Packit bbb0ff
            ALIAS="$2"
Packit bbb0ff
        else
Packit bbb0ff
            if echo "$FILE" | egrep -q "^\.(\.)?/"; then
Packit bbb0ff
                # ^ if the path is specified as relative ~ begins with ./ or ../
Packit bbb0ff
                local POM=$(dirname "$FILE")
Packit bbb0ff
                ALIAS=$(cd "$POM"; pwd)
Packit bbb0ff
                ALIAS="$ALIAS/$(basename $FILE)"
Packit bbb0ff
            else
Packit bbb0ff
                ALIAS=$1
Packit bbb0ff
            fi
Packit bbb0ff
            ALIAS=$(echo $ALIAS | tr '/' "$SEPARATOR" | sed "s/^${SEPARATOR}*//")
Packit bbb0ff
        fi
Packit bbb0ff
        rlLogInfo "Sending $FILE as $ALIAS"
Packit bbb0ff
        ln -s "$(readlink -f $FILE)" "$TMPDIR/$ALIAS"
Packit bbb0ff
Packit bbb0ff
        if [ -z "$BEAKERLIB_COMMAND_SUBMIT_LOG" ]
Packit bbb0ff
        then
Packit bbb0ff
          BEAKERLIB_COMMAND_SUBMIT_LOG="$__INTERNAL_DEFAULT_SUBMIT_LOG"
Packit bbb0ff
        fi
Packit bbb0ff
Packit bbb0ff
        $BEAKERLIB_COMMAND_SUBMIT_LOG -T "$TESTID" -l "$TMPDIR/$ALIAS"
Packit bbb0ff
        RETVAL=$?
Packit bbb0ff
    fi
Packit bbb0ff
    rm -rf $TMPDIR
Packit bbb0ff
    return $RETVAL
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlShowPkgVersion
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head2 Info
Packit bbb0ff
Packit bbb0ff
=head3 rlShowPackageVersion
Packit bbb0ff
Packit bbb0ff
Shows a message about version of packages.
Packit bbb0ff
Packit bbb0ff
    rlShowPackageVersion package [package...]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item package
Packit bbb0ff
Packit bbb0ff
Name of a package(s) you want to log.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlShowPackageVersion()
Packit bbb0ff
{
Packit bbb0ff
    local score=0
Packit bbb0ff
    if [ $# -eq 0 ]; then
Packit bbb0ff
        rlLogWarning "rlShowPackageVersion: Too few options"
Packit bbb0ff
        return 1
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    local pkg
Packit bbb0ff
    for pkg in "$@"; do
Packit bbb0ff
        if rpm -q $pkg &> /dev/null; then
Packit bbb0ff
            IFS=$'\n'
Packit bbb0ff
            local line
Packit bbb0ff
            for line in $(rpm -q $pkg --queryformat "$pkg RPM version: %{version}-%{release}.%{arch}\n")
Packit bbb0ff
            do
Packit bbb0ff
                rlLog $line
Packit bbb0ff
            done
Packit bbb0ff
            unset IFS
Packit bbb0ff
        else
Packit bbb0ff
            rlLogWarning "rlShowPackageVersion: Unable to locate package $pkg"
Packit bbb0ff
            let score+=1
Packit bbb0ff
        fi
Packit bbb0ff
    done
Packit bbb0ff
    [ $score -eq 0 ] && return 0 || return 1
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# backward compatibility
Packit bbb0ff
rlShowPkgVersion() {
Packit bbb0ff
    rlLogWarning "rlShowPkgVersion is obsoleted by rlShowPackageVersion"
Packit bbb0ff
    rlShowPackageVersion "$@";
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlGetArch
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlGetArch
Packit bbb0ff
Packit bbb0ff
This function is deprecated. Use rlGetPrimaryArch or rlGetSecondaryArch
Packit bbb0ff
instead, or use uname. This function will be only kept for compatibility.
Packit bbb0ff
Packit bbb0ff
Return base arch for the current system (good when you need
Packit bbb0ff
base arch on a multilib system).
Packit bbb0ff
Packit bbb0ff
    rlGetArch
Packit bbb0ff
Packit bbb0ff
On an i686 system you will get i386, on a ppc64 you will get ppc.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
rlGetArch() {
Packit bbb0ff
    local archi=$( uname -i 2>/dev/null || uname -m )
Packit bbb0ff
    case "$archi" in
Packit bbb0ff
        i486 | i586 | i686)
Packit bbb0ff
            archi='i386'
Packit bbb0ff
        ;;
Packit bbb0ff
        ppc64)
Packit bbb0ff
            archi='ppc'
Packit bbb0ff
        ;;
Packit bbb0ff
        '')
Packit bbb0ff
            rlLogWarning "rlGetArch: Do not know what the arch is ('$(uname -a)'), guessing 'i386'"
Packit bbb0ff
            archi='i386'
Packit bbb0ff
        ;;
Packit bbb0ff
    esac
Packit bbb0ff
    rlLogWarning "rlGetArch: This function is deprecated"
Packit bbb0ff
    rlLogWarning "rlGetArch: Update test to use rlGetPrimaryArch/rlGetSecondaryArch"
Packit bbb0ff
    rlLogDebug "rlGetArch: This is architecture '$archi'"
Packit bbb0ff
    echo "$archi"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlGetPrimaryArch
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlGetPrimaryArch
Packit bbb0ff
Packit bbb0ff
Return primary arch for the current system (good when you need
Packit bbb0ff
base arch on a multilib system).
Packit bbb0ff
Packit bbb0ff
    rlGetPrimaryArch
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
rlGetPrimaryArch() {
Packit bbb0ff
    local res=0
Packit bbb0ff
    local archi=$( uname -m )
Packit bbb0ff
    local rhelv=$( rlGetDistroRelease )
Packit bbb0ff
Packit bbb0ff
    local retval=$archi
Packit bbb0ff
Packit bbb0ff
    case "$archi" in
Packit bbb0ff
        i386 | i486 | i586 | i686)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='i386'
Packit bbb0ff
                ;;
Packit bbb0ff
                6)
Packit bbb0ff
                    retval='i686'
Packit bbb0ff
                ;;
Packit bbb0ff
                7)
Packit bbb0ff
                    retval=''
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval=''
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        ppc64)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='ppc'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval='ppc64'
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        x86_64)
Packit bbb0ff
            retval='x86_64'
Packit bbb0ff
        ;;
Packit bbb0ff
        s390x)
Packit bbb0ff
            retval='s390x'
Packit bbb0ff
        ;;
Packit bbb0ff
        s390)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4)
Packit bbb0ff
                    retval='s390'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval=''
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        ia64)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='ia64'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval=''
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        aarch64)
Packit bbb0ff
            retval='aarch64'
Packit bbb0ff
        ;;
Packit bbb0ff
        ppc64le)
Packit bbb0ff
            retval='ppc64le'
Packit bbb0ff
        ;;
Packit bbb0ff
        *)
Packit bbb0ff
            rlLogError "rlGetPrimaryArch: Do not know what the arch is ('$(uname -a)')."
Packit bbb0ff
            retval=''
Packit bbb0ff
            res=1
Packit bbb0ff
        ;;
Packit bbb0ff
    esac
Packit bbb0ff
Packit bbb0ff
    if ! rlIsRHEL
Packit bbb0ff
    then
Packit bbb0ff
      rlLogInfo "rlGetPrimaryArch: Concept of primary and secondary architectures is defined on RHEL only"
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    rlLogDebug "rlGetPrimaryArch: The primary architecture is '$retval'"
Packit bbb0ff
    echo "$retval"
Packit bbb0ff
    return $res
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlGetSecondaryArch
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlGetSecondaryArch
Packit bbb0ff
Packit bbb0ff
Return base arch for the current system (good when you need
Packit bbb0ff
base arch on a multilib system).
Packit bbb0ff
Packit bbb0ff
    rlGetSecondaryArch
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
rlGetSecondaryArch() {
Packit bbb0ff
    local res=0
Packit bbb0ff
    local archi=$( uname -m )
Packit bbb0ff
    local rhelv=$( rlGetDistroRelease )
Packit bbb0ff
Packit bbb0ff
    local retval=$archi
Packit bbb0ff
Packit bbb0ff
    case "$archi" in
Packit bbb0ff
        i386 | i486 | i586 | i686)
Packit bbb0ff
            retval=''
Packit bbb0ff
        ;;
Packit bbb0ff
        ppc64)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='ppc64'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval='ppc'
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        x86_64)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='i386'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval='i686'
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        s390x)
Packit bbb0ff
            retval='s390'
Packit bbb0ff
        ;;
Packit bbb0ff
        s390)
Packit bbb0ff
            retval=''
Packit bbb0ff
        ;;
Packit bbb0ff
        ia64)
Packit bbb0ff
            case "$rhelv" in
Packit bbb0ff
                4 | 5)
Packit bbb0ff
                    retval='i386'
Packit bbb0ff
                ;;
Packit bbb0ff
                *)
Packit bbb0ff
                    retval=''
Packit bbb0ff
                ;;
Packit bbb0ff
            esac
Packit bbb0ff
        ;;
Packit bbb0ff
        aarch64)
Packit bbb0ff
            retval=''
Packit bbb0ff
        ;;
Packit bbb0ff
        ppc64le)
Packit bbb0ff
            retval=''
Packit bbb0ff
        ;;
Packit bbb0ff
        *)
Packit bbb0ff
            rlLogError "rlGetSecondaryArch: Do not know what the arch is ('$(uname -a)')."
Packit bbb0ff
            retval=''
Packit bbb0ff
            res=1
Packit bbb0ff
        ;;
Packit bbb0ff
    esac
Packit bbb0ff
Packit bbb0ff
    if ! rlIsRHEL; then
Packit bbb0ff
      rlLogError "rlGetSecondaryArch: Concept of primary and secondary architectures is defined on RHEL only"
Packit bbb0ff
      retval=''
Packit bbb0ff
      res=2
Packit bbb0ff
    fi
Packit bbb0ff
Packit bbb0ff
    rlLogDebug "rlGetSecondaryArch: The secondary architecture is '$retval'"
Packit bbb0ff
    echo "$retval"
Packit bbb0ff
    return $res
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlGetDistroRelease, rlGetDistroVariant
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlGetDistroRelease
Packit bbb0ff
Packit bbb0ff
=head3 rlGetDistroVariant
Packit bbb0ff
Packit bbb0ff
Return release or variant of the distribution on the system.
Packit bbb0ff
Packit bbb0ff
    rlGetDistroRelease
Packit bbb0ff
    rlGetDistroVariant
Packit bbb0ff
Packit bbb0ff
For example on the RHEL-4-AS you will get release 4 and variant AS,
Packit bbb0ff
on the RHEL-5-Client you will get release 5 and variant Client.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
__rlGetDistroVersion() {
Packit bbb0ff
    local version=0
Packit bbb0ff
    if rpm -q redhat-release &>/dev/null; then
Packit bbb0ff
        version=$( rpm -q --qf="%{VERSION}" redhat-release )
Packit bbb0ff
    elif rpm -q fedora-release &>/dev/null; then
Packit bbb0ff
        version=$( rpm -q --qf="%{VERSION}" fedora-release )
Packit bbb0ff
    elif rpm -q centos-release &>/dev/null; then
Packit bbb0ff
        version=$( rpm -q --qf="%{VERSION}" centos-release )
Packit bbb0ff
    elif rpm -q --whatprovides redhat-release &>/dev/null; then
Packit bbb0ff
        version=$( rpm -q --qf="%{VERSION}" --whatprovides redhat-release )
Packit bbb0ff
    else
Packit bbb0ff
        version="unknown"
Packit bbb0ff
    fi
Packit bbb0ff
    rlLogDebug "__rlGetDistroVersion: This is distribution version '$version'"
Packit bbb0ff
    echo "$version"
Packit bbb0ff
}
Packit bbb0ff
rlGetDistroRelease() {
Packit bbb0ff
    __rlGetDistroVersion | sed "s/^\([0-9.]\+\)[^0-9.]\+.*$/\1/" | sed "s/6\.9[0-9]/7/" | cut -d '.' -f 1
Packit bbb0ff
}
Packit bbb0ff
rlGetDistroVariant() {
Packit bbb0ff
    VARIANT="$(__rlGetDistroVersion | sed "s/^[0-9.]\+\(.*\)$/\1/")"
Packit bbb0ff
    if [ -z "$VARIANT" ]; then
Packit bbb0ff
      rpm -q --qf="%{NAME}" --whatprovides redhat-release | cut -c 16- | sed 's/.*/\u&/'
Packit bbb0ff
    else
Packit bbb0ff
      echo $VARIANT
Packit bbb0ff
    fi
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlShowRunningKernel
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlShowRunningKernel
Packit bbb0ff
Packit bbb0ff
Log a message with version of the currently running kernel.
Packit bbb0ff
Packit bbb0ff
    rlShowRunningKernel
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlShowRunningKernel() {
Packit bbb0ff
    rlLog "Kernel version: $(uname -r)"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlPhaseStart
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head2 Phases
Packit bbb0ff
Packit bbb0ff
=head3 rlPhaseStart
Packit bbb0ff
Packit bbb0ff
Starts a phase of a specific type. The final phase result is based
Packit bbb0ff
on all asserts included in the phase.  Do not forget to end phase
Packit bbb0ff
with C<rlPhaseEnd> when you are done.
Packit bbb0ff
Packit bbb0ff
    rlPhaseStart type [name]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item type
Packit bbb0ff
Packit bbb0ff
Type of the phase, one of the following:
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item FAIL
Packit bbb0ff
Packit bbb0ff
When assert fails here, phase will report a FAIL.
Packit bbb0ff
Packit bbb0ff
=item WARN
Packit bbb0ff
Packit bbb0ff
When assert fails here, phase will report a WARN.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
=item name
Packit bbb0ff
Packit bbb0ff
Optional name of the phase (if not provided, one will be generated).
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
If all asserts included in the phase pass, phase reports PASS.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlPhaseStart() {
Packit bbb0ff
    if [ "x$1" = "xFAIL" -o "x$1" = "xWARN" ] ; then
Packit bbb0ff
        rljAddPhase "$1" "$2"
Packit bbb0ff
        return $?
Packit bbb0ff
    else
Packit bbb0ff
        rlLogError "rlPhaseStart: Unknown phase type: $1"
Packit bbb0ff
        return 1
Packit bbb0ff
    fi
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlPhaseEnd
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlPhaseEnd
Packit bbb0ff
Packit bbb0ff
End current phase, summarize asserts included and report phase result.
Packit bbb0ff
Packit bbb0ff
    rlPhaseEnd
Packit bbb0ff
Packit bbb0ff
Final phase result is based on included asserts and phase type.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlPhaseEnd() {
Packit bbb0ff
    rljClosePhase
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlPhaseStart*
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlPhaseStartSetup
Packit bbb0ff
Packit bbb0ff
=head3 rlPhaseStartTest
Packit bbb0ff
Packit bbb0ff
=head3 rlPhaseStartCleanup
Packit bbb0ff
Packit bbb0ff
Start a phase of the specified type: Setup -> WARN, Test -> FAIL, Cleanup -> WARN.
Packit bbb0ff
Packit bbb0ff
    rlPhaseStartSetup [name]
Packit bbb0ff
    rlPhaseStartTest [name]
Packit bbb0ff
    rlPhaseStartCleanup [name]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item name
Packit bbb0ff
Packit bbb0ff
Optional name of the phase. If not specified, default Setup/Test/Cleanup are
Packit bbb0ff
used.
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
If you do not want these shortcuts, use plain C<rlPhaseStart> function.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlPhaseStartSetup() {
Packit bbb0ff
    rlPhaseStart "WARN" "${1:-Setup}"
Packit bbb0ff
}
Packit bbb0ff
rlPhaseStartTest() {
Packit bbb0ff
    rlPhaseStart "FAIL" "${1:-Test}"
Packit bbb0ff
}
Packit bbb0ff
rlPhaseStartCleanup() {
Packit bbb0ff
    rlPhaseStart "WARN" "${1:-Cleanup}"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlLogLowMetric
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head2 Metric
Packit bbb0ff
Packit bbb0ff
=head3 rlLogMetricLow
Packit bbb0ff
Packit bbb0ff
Log a metric, which should be as low as possible to the journal.
Packit bbb0ff
(Example: memory consumption, run time)
Packit bbb0ff
Packit bbb0ff
    rlLogMetricLow name value [tolerance]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item name
Packit bbb0ff
Packit bbb0ff
Name of the metric. It has to be unique in a phase.
Packit bbb0ff
Packit bbb0ff
=item value
Packit bbb0ff
Packit bbb0ff
Value of the metric.
Packit bbb0ff
Packit bbb0ff
=item tolerance
Packit bbb0ff
Packit bbb0ff
It is used when comparing via rcw. It means how larger can the
Packit bbb0ff
second value be to not trigger a FAIL. Default is 0.2
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
When comparing FIRST, SECOND, then:
Packit bbb0ff
Packit bbb0ff
    FIRST >= SECOND means PASS
Packit bbb0ff
    FIRST+FIRST*tolerance >= SECOND means WARN
Packit bbb0ff
    FIRST+FIRST*tolerance < SECOND means FAIL
Packit bbb0ff
Packit bbb0ff
B<Example:> Simple benchmark is compared via this metric type in
Packit bbb0ff
rcw.  It has a tolerance of 0.2. First run had 1 second. So:
Packit bbb0ff
Packit bbb0ff
    For PASS, second run has to be better or equal to first.
Packit bbb0ff
            So any value of second or less is a PASS.
Packit bbb0ff
    For WARN, second run can be a little worse than first.
Packit bbb0ff
            Tolerance is 0.2, so anything lower than 1.2 means WARN.
Packit bbb0ff
    For FAIL, anything worse than 1.2 means FAIL.
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlLogMetricLow() {
Packit bbb0ff
    rljAddMetric "low" "$1" "$2" "$3"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
rlLogLowMetric() {
Packit bbb0ff
    rlLogWarning "rlLogLowMetric is deprecated, use rlLogMetricLow instead"
Packit bbb0ff
    rljAddMetric "low" "$1" "$2" "$3"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
# rlLogMetricHigh
Packit bbb0ff
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit bbb0ff
: <<'=cut'
Packit bbb0ff
=pod
Packit bbb0ff
Packit bbb0ff
=head3 rlLogMetricHigh
Packit bbb0ff
Packit bbb0ff
Log a metric, which should be as high as possible to the journal.
Packit bbb0ff
(Example: number of executions per second)
Packit bbb0ff
Packit bbb0ff
    rlLogMetricHigh name value [tolerance]
Packit bbb0ff
Packit bbb0ff
=over
Packit bbb0ff
Packit bbb0ff
=item name
Packit bbb0ff
Packit bbb0ff
Name of the metric. It has to be unique in a phase.
Packit bbb0ff
Packit bbb0ff
=item value
Packit bbb0ff
Packit bbb0ff
Value of the metric.
Packit bbb0ff
Packit bbb0ff
=item tolerance
Packit bbb0ff
Packit bbb0ff
It is used when comparing via rcw. It means how lower can the
Packit bbb0ff
second value be to not trigger a FAIL. Default is 0.2
Packit bbb0ff
Packit bbb0ff
=back
Packit bbb0ff
Packit bbb0ff
When comparing FIRST, SECOND, then:
Packit bbb0ff
Packit bbb0ff
    FIRST <= SECOND means PASS
Packit bbb0ff
    FIRST+FIRST*tolerance <= SECOND means WARN
Packit bbb0ff
    FIRST+FIRST*tolerance > SECOND means FAIL
Packit bbb0ff
Packit bbb0ff
=cut
Packit bbb0ff
Packit bbb0ff
rlLogMetricHigh() {
Packit bbb0ff
    rljAddMetric "high" "$1" "$2" "$3"
Packit bbb0ff
}
Packit bbb0ff
Packit bbb0ff
rlLogHighMetric() {
Packit bbb0ff
    rlLogWarning "rlLogHighMetric is deprecated, use rlLogMetricHigh instead"
Packit bbb0ff
    rljAddMetric "high" "$1" "$2" "$3"
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