testing: Override user environment PATH in chroot
[strongswan.git] / testing / scripts / function.sh
index a04490a..c512b8a 100755 (executable)
 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 # for more details.
 
+export TERM=xterm
+RED=$(tput setaf 1)
+GREEN=$(tput setaf 2)
+YELLOW=$(tput setaf 3)
+NORMAL=$(tput op)
+
+# exit with given error message
+# $1 - error message
+die() {
+       echo -e "${RED}$1${NORMAL}"
+       exit 1
+}
+
 # execute command
 # $1 - command to execute
 # $2 - whether or not to log command exit status
@@ -37,23 +50,28 @@ execute()
 # $1 - command to execute
 execute_chroot()
 {
-       execute "chroot $LOOPDIR $@"
+       execute "chroot $LOOPDIR env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $@"
 }
 
-export TERM=xterm
-RED=$(tput setaf 1)
-GREEN=$(tput setaf 2)
-NORMAL=$(tput op)
-
-function cecho {
-    echo -e "\033[1;31m$1\033[0m"
+# write green status message to console
+# $1 - msg
+echo_ok()
+{
+       echo -e "${GREEN}$1${NORMAL}"
 }
-function cgecho {
-    echo -e "\033[1;32m$1\033[0m"
+
+# write red status message to console
+# $1 - msg
+echo_failed()
+{
+       echo -e "${RED}$1${NORMAL}"
 }
 
-function cecho-n {
-    echo -en "\033[1;31m$1\033[0m"
+# write yellow status message to console
+# $1 - msg
+echo_warn()
+{
+       echo -e "${YELLOW}$1${NORMAL}"
 }
 
 # log an action
@@ -76,11 +94,86 @@ log_status()
        echo
 }
 
-# exit with given error message
-# $1 - error message
-die() {
-       echo -e "${RED}$1${NORMAL}"
-       exit 1
+# the following two functions are stolen from [1]
+# [1] - http://www.linuxjournal.com/content/use-bash-trap-statement-cleanup-temporary-files
+
+declare -a on_exit_items
+
+# perform registered actions on exit
+on_exit()
+{
+       for ((onex=${#on_exit_items[@]}-1; onex>=0; onex--))
+       do
+               echo "On_Exit: ${on_exit_items[$onex]}" >>$LOGFILE
+               ${on_exit_items[$onex]} >>$LOGFILE 2>&1
+       done
+       on_exit_items=""
+       trap - EXIT
+}
+
+# register a command to execute when the calling script terminates. The
+# registered commands are called in FILO order.
+# $* - command to register
+do_on_exit()
+{
+       local n=${#on_exit_items[*]}
+       on_exit_items[$n]="$*"
+       if [ $n -eq 0 ]; then
+               trap on_exit EXIT
+       fi
+}
+
+# wait for a mount to disappear
+# $1 - device/image to wait for
+# $2 - maximum time to wait in seconds, default is 5 seconds
+graceful_umount()
+{
+       secs=$2
+       [ ! $secs ] && secs=5
+
+       let steps=$secs*100
+       for st in `seq 1 $steps`
+       do
+               umount $1 >>$LOGFILE 2>&1
+               mount | grep $1 >/dev/null 2>&1
+               [ $? -eq 0 ] || return 0
+               sleep 0.01
+       done
+
+       return 1
+}
+
+# load qemu NBD kernel module, if not already loaded
+load_qemu_nbd()
+{
+       lsmod | grep ^nbd[[:space:]]* >/dev/null 2>&1
+       if [ $? != 0 ]
+       then
+               log_action "Loading NBD kernel module"
+               execute "modprobe nbd max_part=16"
+       fi
+}
+
+# check if given commands exist in $PATH
+# $* - commands to check
+check_commands()
+{
+       for i in $*
+       do
+               command -v $i >/dev/null || { die "Required command $i not found"; exit 1; }
+       done
+}
+
+# check if any of the given virtual guests are running
+# $* - names of guests to check
+running_any()
+{
+       command -v virsh >/dev/null || return 1
+       for host in $*
+       do
+               virsh list --name 2>/dev/null | grep "^$host$" >/dev/null && return 0
+       done
+       return 1
 }
 
 #############################################
@@ -108,47 +201,3 @@ function searchandreplace {
     done
 
 }
-
-#############################################
-# add a bridge
-#
-
-function umlbr_add {
-       brctl addbr     "umlbr$1"
-       brctl setfd     "umlbr$1" 0
-       brctl setageing "umlbr$1" 3600
-       brctl stp       "umlbr$1" off
-       ifconfig        "umlbr$1" "$2" netmask "$3" up 
-}
-
-#############################################
-# delete a bridge
-#
-
-function umlbr_del {
-       ifconfig    "umlbr$1" down                     &> /dev/null 2>&1
-       brctl delbr "umlbr$1"                          &> /dev/null 2>&1
-}
-
-#############################################
-# add a tap interface to a bridge
-#
-
-function umlbr_add_tap {
-       tunctl -t "tap$1_$2"                           &> /dev/null 2>&1
-       ifconfig "tap$1_$2" 0.0.0.0 promisc up         &> /dev/null 2>&1
-       brctl addif "umlbr$1" "tap$1_$2"               &> /dev/null 2>&1
-       cecho-n "$2.."
- }
-
-#############################################
-# delete a tap interface from a bridge
-#
-
-function umlbr_del_tap {
-       ifconfig "umlbr$2" down                        &> /dev/null 2>&1
-       brctl delif "umlbr$1" "tap$1_$2"               &> /dev/null 2>&1
-       tunctl -d "tap$1_$2"                           &> /dev/null 2>&1
-       cecho-n "$2.."
- }
-