summaryrefslogtreecommitdiffstats
path: root/tests/include/utils.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/include/utils.sh')
-rwxr-xr-xtests/include/utils.sh195
1 files changed, 195 insertions, 0 deletions
diff --git a/tests/include/utils.sh b/tests/include/utils.sh
new file mode 100755
index 0000000..404c3e8
--- /dev/null
+++ b/tests/include/utils.sh
@@ -0,0 +1,195 @@
+#!/bin/bash
+
+# Copyright (c) 2016 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Author: Lin Li <lilin@redhat.com>
+
+
+#summary of this script:
+# this script is used to provide the generai utils for the automation script based on shell
+# all the global variables should be upper case and began with under line since this script will be used by many scripts
+# and we don't want the their value is be override by mistake
+
+
+###############################global variables######################################
+
+#the global variables should begin with under line plus some special keyword??
+#global variables, can be used by other scripts
+#the stdout and stderr of the cmd execution in Cmd function
+#can get the exit status of the Cmd function by $?
+_STDOUT=
+_STDERR=
+#if set to 1 will not print the stdout and stderr in the function Cmd
+#should set them to 0 after using it
+_IGNORE_STDOUT=0
+_IGNORE_STDERR=0
+
+#current hostname, same as the global variable HOSTNAME
+#don't use readonly since we maybe source this file many times in the same shell environment
+[ -z "$HOSTNAME" ] && HOSTNAME=$(hostname)
+
+#private global variables, only used in current script
+#temp dir and files used by Cmd to capture the stderr and exit status of cmd execution
+_TEMP_DIR="/tmp/lstf"
+[ -d $_TEMP_DIR ] || mkdir -p $_TEMP_DIR >& /dev/null || Fail "failed to mkdir $_TEMP_DIR"
+
+_TEMP_STDERR_FILE="$_TEMP_DIR/stderr.$$"
+[ -e $_TEMP_STDERR_FILE ] || touch $_TEMP_STDERR_FILE || Fail "failed to create $_TEMP_STDERR_FILE"
+_TEMP_RETURN_FILE="$_TEMP_DIR/return.$$"
+[ -e $_TEMP_RETURN_FILE ] || touch $_TEMP_RETURN_FILE || Fail "failed to create $_TEMP_RETURN_FILE"
+
+###############################################################################################
+
+#private function
+#print the formated date string
+
+function _date_str (){
+ date 2>/dev/null
+}
+
+###############################################################################################
+#summary:
+# eval the paramters and format the output
+# don't support stderr redirection in the passed command
+#usage:
+# Cmd ls -a
+# if you don't want to print the stdout or stderr you can set the global variables _IGNORE_STDOUT and _IGNORE_STDERR, for example
+# _IGNORE_STDOUT=1
+# Cmd ls -a
+# _IGNORE_STDOUT=0
+#return:
+# return the exit status of paramter value execution
+# store the stdout and stderr to the global variables _STDOUT and _STDERR
+###############################################################################################
+
+function Cmd (){
+#use the double qutoa to store all the arguments as a single string
+ local cmd="$*"
+ local date_str=$(_date_str)
+ local stdout=$(eval $cmd 2>$_TEMP_STDERR_FILE; echo $? >$_TEMP_RETURN_FILE 2>/dev/null)
+
+#why cannot get the exit status of the value of eval by this ?
+# local exit_status=$?
+#remove the \n hence don't use this method
+# local exit_status=$(cat $_TEMP_RETURN_FILE)
+
+ local exit_status=$(< $_TEMP_RETURN_FILE)
+ local stderr=$(< $_TEMP_STDERR_FILE)
+
+ _STDOUT=$stdout
+ _STDERR=$stderr
+
+#will not print the stdout and stderr if the 2 global variables set to 1
+ [ $_IGNORE_STDOUT -eq 1 ] && stdout='redirect the stdout to /dev/null'
+ [ $_IGNORE_STDERR -eq 1 ] && stderr='redirect the stderr to /dev/null'
+
+ echo "[CMD][$date_str][$HOSTNAME]#$cmd"
+ echo "STDOUT:$stdout"
+ echo "STDERR:$stderr"
+ echo "RETURN:$exit_status"
+ echo
+
+ return $exit_status
+}
+
+###############################################################################################
+#summary:
+# print the formated log
+# consider filter the output through the level
+# level should be INFO, ERROR, WARNING, PASSED
+#usage:
+# Log "msg" "level"
+# Log "msg"
+# don't use it like this : Log msg level
+#return:
+# 0
+###############################################################################################
+
+#should redirect io to stderr if log_level is error?
+
+function Log (){
+ local msg=$1
+ local log_level=${2:-INFO}
+ local date_str=$(_date_str)
+
+ echo "[$log_level][$date_str]:$msg"
+ echo
+
+ return 0
+}
+
+###############################################################################################
+#summary:
+# print the formated error message, call stack information and exit the program with 1
+#usage:
+# Fail error_msg
+#exit:
+# 1
+###############################################################################################
+
+function Fail (){
+ local msg=$*
+ local stack=`caller 0`
+
+ Log "$stack"
+ Log "$msg" "ERROR"
+
+ exit 1
+}
+
+###############################################################################################
+#summary:
+# print the formated passed message and exit the program with 0
+#usage:
+# Pass
+#exit:
+# 0
+###############################################################################################
+
+function Pass (){
+ Log "Test case passed" "PASSED"
+
+ exit 0
+}
+
+###############################################################################################
+#summary:
+# assert the expression,
+# if the exiting status of the expression is not 0 fail the case and print the failed message
+# if 0 do nothing just return 0
+#usage:
+# Assert "$exit_status -eq 0" "failed string"
+# Assert "ls /dev/sdb" "failed string"
+#return/exit:
+# the exiting value of expression
+###############################################################################################
+
+function Assert (){
+#should consider the expr is integra or expression, script?
+ local expr=$1
+ local failed_msg=$2
+ [ $expr ] || Fail "$failed_msg"
+
+ return 0
+}
+
+is_null()
+{
+ local string=$1
+ string=$(echo $string | sed 's/\s//g')
+ test -z $string
+}
+