uloop: fix a regression in timeout handling
[project/libubox.git] / examples / json_script-tests.sh
1 JSON_SCRIPT=tests.json
2 JSON_SCRIPT_BIN=./json_script-example
3 FILE_STDOUT=tests.stdout
4 FILE_STDERR=tests.stderr
5 FILE_EXPECTED=tests.expected
6
7 call_json_script() {
8 #export LD_PRELOAD=../libjson_script.so
9 $JSON_SCRIPT_BIN "$@" "$JSON_SCRIPT" >"$FILE_STDOUT" 2>"$FILE_STDERR"
10 }
11
12 assertStdioEquals() {
13 local expected="$1"
14 local file_stdio="$2"
15
16 echo "$expected" >"$FILE_EXPECTED"
17 if [ -z "$expected" ]; then
18 # we are expecting empty output, but we deliberately added a newline
19 # with echo above, so adding another echo to compensate for that
20 echo >>"$file_stdio"
21 fi
22 diff -up "$FILE_EXPECTED" "$file_stdio" >/dev/null 2>&1 || {
23 cat >&2 <<EOF
24 |--- expecting
25 $expected<
26 |--- actual
27 $(cat $file_stdio)<
28 |--- END
29 EOF
30 exit 1
31 }
32 }
33
34 assertStdoutEquals() {
35 assertStdioEquals "$1" "$FILE_STDOUT"
36 }
37
38 assertStderrEquals() {
39 assertStdioEquals "$1" "$FILE_STDERR"
40 }
41
42 test_bad_json() {
43 cat >"$JSON_SCRIPT" <<-EOF
44 [
45 [ ]
46 [ ]
47 ]
48 EOF
49 call_json_script
50 assertStderrEquals "load JSON data from $JSON_SCRIPT failed."
51 }
52
53 test_expr_eq() {
54 cat >"$JSON_SCRIPT" <<-EOF
55 [
56 [ "if",
57 [ "eq", "VAR", "foo" ],
58 [ "echo", "bar" ],
59 [ "echo", "baz" ]
60 ]
61 ]
62 EOF
63 call_json_script "VAR=foo"
64 assertStdoutEquals "echo bar"
65 call_json_script "VAR=xxx"
66 assertStdoutEquals "echo baz"
67 }
68
69 test_expr_has() {
70 cat >"$JSON_SCRIPT" <<-EOF
71 [
72 [ "if",
73 [ "has", "VAR" ],
74 [ "echo", "bar" ],
75 [ "echo", "baz" ]
76 ]
77 ]
78 EOF
79 call_json_script "VAR=foo"
80 assertStdoutEquals "echo bar"
81 call_json_script
82 assertStdoutEquals "echo baz"
83 }
84
85 test_expr_regex_single() {
86 cat >"$JSON_SCRIPT" <<-EOF
87 [
88 [ "if",
89 [ "regex", "VAR", ".ell." ],
90 [ "echo", "bar" ],
91 [ "echo", "baz" ]
92 ]
93 ]
94 EOF
95 call_json_script "VAR=hello"
96 assertStdoutEquals "echo bar"
97 call_json_script "VAR=.ell."
98 assertStdoutEquals "echo bar"
99 call_json_script
100 assertStdoutEquals "echo baz"
101 call_json_script "VAR="
102 assertStdoutEquals "echo baz"
103 call_json_script "VAR=hell"
104 assertStdoutEquals "echo baz"
105 }
106
107 test_expr_regex_multi() {
108 cat >"$JSON_SCRIPT" <<-EOF
109 [
110 [ "if",
111 [ "regex", "VAR", [ ".ell.", "w.rld" ] ],
112 [ "echo", "bar" ],
113 [ "echo", "baz" ]
114 ]
115 ]
116 EOF
117 call_json_script "VAR=hello"
118 assertStdoutEquals "echo bar"
119 call_json_script "VAR=world"
120 assertStdoutEquals "echo bar"
121 call_json_script "VAR=.ell."
122 assertStdoutEquals "echo bar"
123 call_json_script "VAR=w.rld"
124 assertStdoutEquals "echo bar"
125 call_json_script
126 assertStdoutEquals "echo baz"
127 call_json_script "VAR="
128 assertStdoutEquals "echo baz"
129 call_json_script "VAR=hell"
130 assertStdoutEquals "echo baz"
131 }
132
133 test_expr_not() {
134 cat >"$JSON_SCRIPT" <<-EOF
135 [
136 [ "if",
137 [ "not", [ "has", "VAR" ] ],
138 [ "echo", "bar" ],
139 [ "echo", "baz" ]
140 ]
141 ]
142 EOF
143 call_json_script "VAR=foo"
144 assertStdoutEquals "echo baz"
145 call_json_script
146 assertStdoutEquals "echo bar"
147 }
148
149 test_expr_and() {
150 cat >"$JSON_SCRIPT" <<-EOF
151 [
152 [ "if",
153 [ "and", [ "eq", "EQVAR", "eqval" ],
154 [ "regex", "REGEXVAR", "regex..." ]
155 ],
156 [ "echo", "bar" ],
157 [ "echo", "baz" ]
158 ]
159 ]
160 EOF
161 call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
162 assertStdoutEquals "echo bar"
163 call_json_script "EQVAR=foo"
164 assertStdoutEquals "echo baz"
165 call_json_script "REGEXVAR=regex***"
166 assertStdoutEquals "echo baz"
167 call_json_script
168 assertStdoutEquals "echo baz"
169 }
170
171 test_expr_or() {
172 cat >"$JSON_SCRIPT" <<-EOF
173 [
174 [ "if",
175 [ "or", [ "not", [ "eq", "EQVAR", "eqval" ] ],
176 [ "regex", "REGEXVAR", [ "regexva.[0-9]", "regexva.[a-z]" ] ]
177 ],
178 [ "echo", "bar" ],
179 [ "echo", "baz" ]
180 ]
181 ]
182 EOF
183 call_json_script "EQVAR=eqval" "REGEXVAR=regexval1"
184 assertStdoutEquals "echo bar"
185 call_json_script "EQVAR=neq" "REGEXVAR=sxc"
186 assertStdoutEquals "echo bar"
187 call_json_script "REGEXVAR=sxc"
188 assertStdoutEquals "echo bar"
189 call_json_script "EQVAR=foo"
190 assertStdoutEquals "echo bar"
191 call_json_script
192 assertStdoutEquals "echo bar"
193 call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
194 assertStdoutEquals "echo baz"
195 }
196
197 test_expr_isdir() {
198 cat >"$JSON_SCRIPT" <<-EOF
199 [
200 [ "if",
201 [ "isdir", "%VAR%" ],
202 [ "echo", "bar" ],
203 [ "echo", "baz" ]
204 ]
205 ]
206 EOF
207 call_json_script "VAR=/"
208 assertStdoutEquals "echo bar"
209 call_json_script "VAR=$(mktemp -u)"
210 assertStdoutEquals "echo baz"
211 call_json_script
212 assertStdoutEquals "echo baz"
213 }
214
215 test_cmd_case() {
216 cat >"$JSON_SCRIPT" <<-EOF
217 [
218 [ "case", "CASEVAR", {
219 "0": [ "echo", "foo" ],
220 "1": [
221 [ "echo", "bar" ],
222 [ "echo", "baz" ]
223 ],
224 "%VAR%": [ "echo", "quz" ]
225 } ]
226 ]
227 EOF
228 call_json_script "CASEVAR=0"
229 assertStdoutEquals "echo foo"
230 call_json_script "CASEVAR=1"
231 assertStdoutEquals "echo bar
232 echo baz"
233 call_json_script "CASEVAR=%VAR%"
234 assertStdoutEquals "echo quz"
235 call_json_script "CASEVAR="
236 assertStdoutEquals ""
237 call_json_script
238 assertStdoutEquals ""
239 call_json_script "CASEVAR=xxx" "VAR=xxx"
240 assertStdoutEquals ""
241 }
242
243 test_cmd_if() {
244 cat >"$JSON_SCRIPT" <<-EOF
245 [
246 [ "if",
247 [ "eq", "VAR", "foo" ],
248 [ "echo", "bar" ],
249 [ "echo", "baz" ]
250 ]
251 ]
252 EOF
253 call_json_script "VAR=foo"
254 assertStdoutEquals "echo bar"
255 call_json_script "VAR=xxx"
256 assertStdoutEquals "echo baz"
257 }
258
259 test_cmd_cb() {
260 cat >"$JSON_SCRIPT" <<-EOF
261 [
262 [ "exec", "%VAR%", "/%VAS%%%/" ]
263 ]
264 EOF
265 call_json_script
266 assertStdoutEquals "exec /%/"
267 call_json_script "VAR="
268 assertStdoutEquals "exec /%/"
269 call_json_script "VAR=qux" "VAS=3"
270 assertStdoutEquals "exec qux /3%/"
271 }
272
273 test_cmd_return() {
274 cat >"$JSON_SCRIPT" <<-EOF
275 [
276 [ "heh", "%HEHVAR%" ],
277 [ "%VAR%", "%VAR%" ],
278 [ "return" ],
279 [ "exec_non_reachable", "Arghhh" ]
280 ]
281 EOF
282 call_json_script "HEHVAR=dude" "VAR=ow"
283 assertStdoutEquals "heh dude
284 %VAR% ow"
285 }
286
287 . ./shunit2