Fix functions for fuel installer
[doctor.git] / tests / functions-common
1 #!/bin/bash
2
3 # Test if the named environment variable is set and not zero length
4 # is_set env-var
5 function is_set {
6     local var=\$"$1"
7     eval "[[ -n \"$var\" ]]"
8 }
9
10 # Prints backtrace info
11 # filename:lineno:function
12 # backtrace level
13 function backtrace {
14     local level=$1
15     local deep
16     deep=$((${#BASH_SOURCE[@]} - 1))
17     echo "[Call Trace]"
18     while [ $level -le $deep ]; do
19         echo "${BASH_SOURCE[$deep]}:${BASH_LINENO[$deep-1]}:${FUNCNAME[$deep-1]}"
20         deep=$((deep - 1))
21     done
22 }
23
24 # Prints line number and "message" in error format
25 # err $LINENO "message"
26 function err {
27     local exitcode=$?
28     local xtrace
29     xtrace=$(set +o | grep xtrace)
30     set +o xtrace
31     local msg="[ERROR] ${BASH_SOURCE[2]}:$1 $2"
32     echo $msg 1>&2;
33     if [[ -n ${LOGDIR} ]]; then
34         echo $msg >> "${LOGDIR}/error.log"
35     fi
36     $xtrace
37     return $exitcode
38 }
39
40 # Prints line number and "message" then exits
41 # die $LINENO "message"
42 function die {
43     local exitcode=$?
44     local xtrace
45     xtrace=$(set +o | grep xtrace)
46     set +o xtrace
47     local line=$1; shift
48     if [ $exitcode == 0 ]; then
49         exitcode=1
50     fi
51     backtrace 2
52     err $line "$*"
53     # Give buffers a second to flush
54     sleep 1
55     $xtrace
56     exit $exitcode
57 }
58
59 # Checks an environment variable is not set or has length 0 OR if the
60 # exit code is non-zero and prints "message" and exits
61 # NOTE: env-var is the variable name without a '$'
62 # die_if_not_set $LINENO env-var "message"
63 function die_if_not_set {
64     local exitcode=$?
65     local xtrace
66     xtrace=$(set +o | grep xtrace)
67     set +o xtrace
68     local line=$1; shift
69     local evar=$1; shift
70     if ! is_set $evar || [ $exitcode != 0 ]; then
71         die $line "$*"
72     fi
73     $xtrace
74 }
75
76 # Wait until the condition is met.
77 # wait_until condition timeout interval
78 function wait_until {
79     local condition="$1"
80     local timeout=$2
81     local interval=$3
82
83     while eval ${condition}
84     do
85         sleep ${interval}
86         timeout=$((${timeout} - ${interval}))
87         if [[ ${timeout} < 0 ]]; then
88             err $LINENO "timed out ($condition)..."
89             return 1
90         fi
91     done
92 }