|
Bryan Gurney |
bb0dc7 |
#!/bin/bash
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
# Copyright (c) 2016 Red Hat, Inc.
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# This program is free software: you can redistribute it and/or modify
|
|
Bryan Gurney |
bb0dc7 |
# it under the terms of the GNU General Public License as published by
|
|
Bryan Gurney |
bb0dc7 |
# the Free Software Foundation, either version 3 of the License, or
|
|
Bryan Gurney |
bb0dc7 |
# (at your option) any later version.
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# This program is distributed in the hope that it will be useful,
|
|
Bryan Gurney |
bb0dc7 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Bryan Gurney |
bb0dc7 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Bryan Gurney |
bb0dc7 |
# GNU General Public License for more details.
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# You should have received a copy of the GNU General Public License
|
|
Bryan Gurney |
bb0dc7 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
# Author: Yi Zhang <yizhan@redhat.com>
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
# filename: function
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
# USAGE
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
test x$LXT_TC = x || return
|
|
Bryan Gurney |
bb0dc7 |
LXT_TC=1
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# print the current date
|
|
Bryan Gurney |
bb0dc7 |
# usage: d=$(tdate)
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tdate ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
date '+%T' 2>/dev/null
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# print the log information
|
|
Bryan Gurney |
bb0dc7 |
# usage: tlog "hello world" "WARNING"
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tlog ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local msg=$1
|
|
Bryan Gurney |
bb0dc7 |
local log_level=${2:-INFO}
|
|
Bryan Gurney |
bb0dc7 |
local cur_date=$(tdate)
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
echo "[$log_level][$cur_date]$msg"
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
return 0
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# run the cmd and format the log. return the exitint status of cmd
|
|
Bryan Gurney |
bb0dc7 |
# use the global variables: tSTDOUT and tSTDERR to return the stdout and stderr
|
|
Bryan Gurney |
bb0dc7 |
# usage: trun "ls"
|
|
Bryan Gurney |
bb0dc7 |
# trun "ls"; echo $?
|
|
Bryan Gurney |
bb0dc7 |
# stdout=$tSTDOUT
|
|
Bryan Gurney |
bb0dc7 |
# stderr=$tSTDERR
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
trun ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local cmd="$*"
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
_trun_ "$cmd"
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# verify the execution of command
|
|
Bryan Gurney |
bb0dc7 |
# if the cmd return 0, mark this checkpoint failed and return 1
|
|
Bryan Gurney |
bb0dc7 |
# if not, mark it passed and return 0
|
|
Bryan Gurney |
bb0dc7 |
# usage: tnot "ls /not_existing"
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tnot () {
|
|
Bryan Gurney |
bb0dc7 |
local cmd="$*"
|
|
Bryan Gurney |
bb0dc7 |
_trun_ "$cmd" 1
|
|
Bryan Gurney |
bb0dc7 |
if test $? -eq 0; then
|
|
Bryan Gurney |
bb0dc7 |
tfail_ "$cmd" ;
|
|
Bryan Gurney |
bb0dc7 |
else
|
|
Bryan Gurney |
bb0dc7 |
tpass_ "$cmd" ;
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# verify the execution of command
|
|
Bryan Gurney |
bb0dc7 |
# if the cmd return 0, mark this checkpoint passed and return 0
|
|
Bryan Gurney |
bb0dc7 |
# if not, mark it failed and return 1
|
|
Bryan Gurney |
bb0dc7 |
# usage: tok "ls /"
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tok ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local cmd="$*"
|
|
Bryan Gurney |
bb0dc7 |
_trun_ "$cmd" 0
|
|
Bryan Gurney |
bb0dc7 |
if test $? -eq 0; then
|
|
Bryan Gurney |
bb0dc7 |
tpass_ "$cmd" ;
|
|
Bryan Gurney |
bb0dc7 |
else
|
|
Bryan Gurney |
bb0dc7 |
tfail_ "$cmd" ;
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# verify the execution of command
|
|
Bryan Gurney |
bb0dc7 |
# if the cmd return 0, mark this checkpoint passed and return 0
|
|
Bryan Gurney |
bb0dc7 |
# if not, mark it failes and exit
|
|
Bryan Gurney |
bb0dc7 |
# usage: terr "ls"
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
#terr ()
|
|
Bryan Gurney |
bb0dc7 |
#{
|
|
Bryan Gurney |
bb0dc7 |
# tok "$*" || tend
|
|
Bryan Gurney |
bb0dc7 |
#}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# verify the execution of command
|
|
Bryan Gurney |
bb0dc7 |
# if the cmd return 0, will continue to run the script
|
|
Bryan Gurney |
bb0dc7 |
# if not, mark it failes and exit
|
|
Bryan Gurney |
bb0dc7 |
# usage: terr "ls"
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
terr ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local cmd="$*"
|
|
Bryan Gurney |
bb0dc7 |
_trun_ "$cmd" 0
|
|
Bryan Gurney |
bb0dc7 |
if test $? -ne 0; then
|
|
Bryan Gurney |
bb0dc7 |
tfail_ "$cmd" ;
|
|
Bryan Gurney |
bb0dc7 |
tend ;
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# exit the program and print the log message
|
|
Bryan Gurney |
bb0dc7 |
# usage: texit "error message" 100
|
|
Bryan Gurney |
bb0dc7 |
# similar to the exception
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
texit ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
msg=$1
|
|
Bryan Gurney |
bb0dc7 |
err=$2
|
|
Bryan Gurney |
bb0dc7 |
is_null $err && err=1
|
|
Bryan Gurney |
bb0dc7 |
test $err -lt 1 || err=1
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
tlog "$msg" "ERROR"
|
|
Bryan Gurney |
bb0dc7 |
exit $2
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# print the test report, cleanup the testing bed and close the testing.
|
|
Bryan Gurney |
bb0dc7 |
# usage: tend
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tend ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local pcount=$(wc -l $tPASS_FILE | awk '{print $1}')
|
|
Bryan Gurney |
bb0dc7 |
local fcount=$(wc -l $tFAIL_FILE | awk '{print $1}')
|
|
Bryan Gurney |
bb0dc7 |
local total=$(( $pcount + $fcount ))
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
echo "#################################Test Report###############################"
|
|
Bryan Gurney |
bb0dc7 |
echo "TOTAL : $total"
|
|
Bryan Gurney |
bb0dc7 |
echo "PASSED : $pcount"
|
|
Bryan Gurney |
bb0dc7 |
echo "FAILED : $fcount"
|
|
Bryan Gurney |
bb0dc7 |
cat $tPASS_FILE $tFAIL_FILE
|
|
Bryan Gurney |
bb0dc7 |
echo "###########################End of running $0########################"
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#cleanup
|
|
Bryan Gurney |
bb0dc7 |
rm -f $tPASS_FILE $tFAIL_FILE $tRETURN_FILE $tSTDERR_FILE
|
|
Bryan Gurney |
bb0dc7 |
# rm -rf $LXT_TMP_DIR
|
|
Bryan Gurney |
bb0dc7 |
if [[ $pcount -eq 0 ]] && [[ $total -eq 0 ]];then
|
|
Bryan Gurney |
bb0dc7 |
exit 0
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
test $pcount -eq 0 && exit 1
|
|
Bryan Gurney |
bb0dc7 |
test $pcount -eq $total && exit 0
|
|
Bryan Gurney |
bb0dc7 |
exit 1
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# private function
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# print the error message and call stack. return 1
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tfail_ ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local msg=$*
|
|
Bryan Gurney |
bb0dc7 |
tlog "$msg" "ERROR" >>$tFAIL_FILE
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
return 1
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# print the sucessful message. return 0
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
tpass_ ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local msg=$*
|
|
Bryan Gurney |
bb0dc7 |
tlog "$msg" "PASS" >> $tPASS_FILE
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
return 0
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
_trun_ ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
local cmd="$1"
|
|
Bryan Gurney |
bb0dc7 |
local chk="$2"
|
|
Bryan Gurney |
bb0dc7 |
local cur_date=$(tdate)
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
local stdout=$(eval "$cmd" 2>$tSTDERR_FILE; echo $? >$tRETURN_FILE 2>/dev/null)
|
|
Bryan Gurney |
bb0dc7 |
#timeout -- how to set timeout?
|
|
Bryan Gurney |
bb0dc7 |
local exit_status=$(< $tRETURN_FILE)
|
|
Bryan Gurney |
bb0dc7 |
local stderr=$(< $tSTDERR_FILE)
|
|
Bryan Gurney |
bb0dc7 |
local msg=CMD
|
|
Bryan Gurney |
bb0dc7 |
#tnot
|
|
Bryan Gurney |
bb0dc7 |
if test x$chk = x1; then
|
|
Bryan Gurney |
bb0dc7 |
test $exit_status -eq 0 || msg=PASS
|
|
Bryan Gurney |
bb0dc7 |
test $exit_status -eq 0 && msg=FAIL
|
|
Bryan Gurney |
bb0dc7 |
#should let the tester know this is the negative testing
|
|
Bryan Gurney |
bb0dc7 |
#if cmd return 0 we will return 1 and vice versa
|
|
Bryan Gurney |
bb0dc7 |
cmd="[NOT] $cmd"
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
#tok
|
|
Bryan Gurney |
bb0dc7 |
if test x$chk = x0; then
|
|
Bryan Gurney |
bb0dc7 |
test $exit_status -eq 0 && msg=PASS
|
|
Bryan Gurney |
bb0dc7 |
test $exit_status -eq 0 || msg=FAIL
|
|
Bryan Gurney |
bb0dc7 |
fi
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
tSTDOUT=$stdout
|
|
Bryan Gurney |
bb0dc7 |
tSTDERR=$stderr
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
test $tIGNORE_STDOUT -eq 1 && stdout='redirect the stdout to /dev/null'
|
|
Bryan Gurney |
bb0dc7 |
test $tIGNORE_STDERR -eq 1 && stderr='redirect the stderr to /dev/null'
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
echo "[$msg][$cur_date][$HOSTNAME]$cmd"
|
|
Bryan Gurney |
bb0dc7 |
echo "STDOUT:"
|
|
Bryan Gurney |
bb0dc7 |
test "x$stdout" = x || echo "$stdout"
|
|
Bryan Gurney |
bb0dc7 |
echo "STDERR:$stderr"
|
|
Bryan Gurney |
bb0dc7 |
echo "RETURN:$exit_status"
|
|
Bryan Gurney |
bb0dc7 |
echo
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
return $exit_status
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# setup the testing environment
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
_tsetup_ ()
|
|
Bryan Gurney |
bb0dc7 |
{
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
LXT_TMP_DIR="/mnt/testarea/lxt";
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
test -z "$HOSTNAME" && HOSTNAME=$(hostname)
|
|
Bryan Gurney |
bb0dc7 |
test -d "$LXT_TMP_DIR" || mkdir -p "$LXT_TMP_DIR" >& /dev/null || exit 1
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
tSTDERR_FILE="$LXT_TMP_DIR/stderr.$$"
|
|
Bryan Gurney |
bb0dc7 |
test -e "$tSTDERR_FILE" || > "$tSTDERR_FILE" || exit 1
|
|
Bryan Gurney |
bb0dc7 |
tRETURN_FILE="$LXT_TMP_DIR/return.$$"
|
|
Bryan Gurney |
bb0dc7 |
test -e "$tRETURN_FILE" || > "$tRETURN_FILE" || exit 1
|
|
Bryan Gurney |
bb0dc7 |
tPASS_FILE="$LXT_TMP_DIR/tc.pass.$$"
|
|
Bryan Gurney |
bb0dc7 |
test -e "$tPASS_FILE" || > "$tPASS_FILE" || exit 1
|
|
Bryan Gurney |
bb0dc7 |
tFAIL_FILE="$LXT_TMP_DIR/tc.fail.$$"
|
|
Bryan Gurney |
bb0dc7 |
test -e "$tFAIL_FILE" || > "$tFAIL_FILE" || exit 1
|
|
Bryan Gurney |
bb0dc7 |
}
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
# main
|
|
Bryan Gurney |
bb0dc7 |
#
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
# global variables
|
|
Bryan Gurney |
bb0dc7 |
tIGNORE_STDOUT=0
|
|
Bryan Gurney |
bb0dc7 |
tIGNORE_STDERR=0
|
|
Bryan Gurney |
bb0dc7 |
tSTDOUT=
|
|
Bryan Gurney |
bb0dc7 |
tSTDERR=
|
|
Bryan Gurney |
bb0dc7 |
#LXT_TMP_DIR
|
|
Bryan Gurney |
bb0dc7 |
# only used in this file
|
|
Bryan Gurney |
bb0dc7 |
tPASS_FILE=
|
|
Bryan Gurney |
bb0dc7 |
tFAIL_FILE=
|
|
Bryan Gurney |
bb0dc7 |
|
|
Bryan Gurney |
bb0dc7 |
_tsetup_
|