]> rtime.felk.cvut.cz Git - novaboot.git/blob - tests/wvtest.sh
tests: Add WVPASSSH function to wvtest.sh
[novaboot.git] / tests / wvtest.sh
1 #
2 # WvTest:
3 #   Copyright (C)2007-2012 Versabanq Innovations Inc. and contributors.
4 #       Licensed under the GNU Library General Public License, version 2.
5 #       See the included file named LICENSE for license information.
6 #       You can get wvtest from: http://github.com/apenwarr/wvtest
7 #
8 # Include this file in your shell script by using:
9 #         #!/bin/sh
10 #         . ./wvtest.sh
11 #
12
13 # we don't quote $TEXT in case it contains newlines; newlines
14 # aren't allowed in test output.  However, we set -f so that
15 # at least shell glob characters aren't processed.
16 _wvtextclean()
17 {
18         ( set -f; echo $* )
19 }
20
21
22 if [ -n "$BASH_VERSION" ]; then
23         _wvfind_caller()
24         {
25                 LVL=$1
26                 WVCALLER_FILE=${BASH_SOURCE[2]}
27                 WVCALLER_LINE=${BASH_LINENO[1]}
28         }
29 else
30         _wvfind_caller()
31         {
32                 LVL=$1
33                 WVCALLER_FILE="unknown"
34                 WVCALLER_LINE=0
35         }
36 fi
37
38
39 _wvcheck()
40 {
41         CODE="$1"
42         TEXT=$(_wvtextclean "$2")
43         OK=ok
44         if [ "$CODE" -ne 0 ]; then
45                 OK=FAILED
46         fi
47         echo "! $WVCALLER_FILE:$WVCALLER_LINE  $TEXT  $OK" >&2
48         if [ "$CODE" -ne 0 ]; then
49                 exit $CODE
50         else
51                 return 0
52         fi
53 }
54
55
56 WVPASS()
57 {
58         TEXT="$*"
59
60         _wvfind_caller
61         if "$@"; then
62                 _wvcheck 0 "$TEXT"
63                 return 0
64         else
65                 _wvcheck 1 "$TEXT"
66                 # NOTREACHED
67                 return 1
68         fi
69 }
70
71 # Use WVPASSSH instead of WVPASS when the command includes pipe or
72 # output redirection. The whole command must be one argument - quote
73 # it.
74 WVPASSSH()
75 {
76         TEXT="$1"
77
78         _wvfind_caller
79         if bash -o pipefail -c "$@"; then
80                 _wvcheck 0 "$TEXT"
81                 return 0
82         else
83                 _wvcheck 1 "$TEXT"
84                 # NOTREACHED
85                 return 1
86         fi
87 }
88
89 WVFAIL()
90 {
91         TEXT="$*"
92
93         _wvfind_caller
94         if "$@"; then
95                 _wvcheck 1 "NOT($TEXT)"
96                 # NOTREACHED
97                 return 1
98         else
99                 _wvcheck 0 "NOT($TEXT)"
100                 return 0
101         fi
102 }
103
104
105 _wvgetrv()
106 {
107         ( "$@" >&2 )
108         echo -n $?
109 }
110
111
112 WVPASSEQ()
113 {
114         _wvfind_caller
115         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
116         echo "Comparing:" >&2
117         echo "$1" >&2
118         echo "--" >&2
119         echo "$2" >&2
120         _wvcheck $(_wvgetrv [ "$1" = "$2" ]) "'$1' = '$2'"
121 }
122
123
124 WVPASSNE()
125 {
126         _wvfind_caller
127         _wvcheck $(_wvgetrv [ "$#" -eq 2 ]) "exactly 2 arguments"
128         echo "Comparing:" >&2
129         echo "$1" >&2
130         echo "--" >&2
131         echo "$2" >&2
132         _wvcheck $(_wvgetrv [ "$1" != "$2" ]) "'$1' != '$2'"
133 }
134
135
136 WVPASSRC()
137 {
138         RC=$?
139         _wvfind_caller
140         _wvcheck $(_wvgetrv [ $RC -eq 0 ]) "return code($RC) == 0"
141 }
142
143
144 WVFAILRC()
145 {
146         RC=$?
147         _wvfind_caller
148         _wvcheck $(_wvgetrv [ $RC -ne 0 ]) "return code($RC) != 0"
149 }
150
151
152 WVSTART()
153 {
154         echo >&2
155         _wvfind_caller
156         echo "Testing \"$*\" in $WVCALLER_FILE:" >&2
157         cd "$WV_BASE_DIR"
158         local dir=test.$(echo $* | tr -s '[[:blank:]]' _ | tr "A-Z" "a-z")
159         rm -rf "$dir"
160         mkdir -p "$dir"
161         cd "$dir"
162 }
163
164 WV_BASE_DIR="$PWD"
165 export NOVABOOT_TEST=1
166 export NOVABOOT_CONFIG_DIR=/dev/null # Do not read config from /etc/novaboot.d
167 export XDG_CONFIG_HOME=/dev/null # Do not read user config from ~/.config/novaboot
168
169 PATH=$(dirname $PWD):$PATH # Find our version of novaboot first
170
171 function create_script ()
172 {
173     (echo "#!/usr/bin/env novaboot"; cat) > script
174     chmod +x script
175 }
176
177 function create_dummy ()
178 {
179     create_script <<EOF
180 load kernel
181 load file
182 EOF
183     touch kernel
184     touch file
185 }