• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/libubox/tests/shunit2/tests.sh

  1 #!/bin/bash
  2 
  3 JSON_SCRIPT=tests.json
  4 JSON_SCRIPT_BIN=${TEST_JSON_SCRIPT=:-./json_script-example}
  5 FILE_STDOUT=tests.stdout
  6 FILE_STDERR=tests.stderr
  7 FILE_EXPECTED=tests.expected
  8 
  9 call_json_script() {
 10         #export LD_PRELOAD=../libjson_script.so
 11         $JSON_SCRIPT_BIN "$@" "$JSON_SCRIPT" >"$FILE_STDOUT" 2>"$FILE_STDERR"
 12 }
 13 
 14 assertStdioEquals() {
 15         local expected="$1"
 16         local file_stdio="$2"
 17 
 18         echo "$expected" >"$FILE_EXPECTED"
 19         if [ -z "$expected" ]; then
 20                 # we are expecting empty output, but we deliberately added a newline
 21                 # with echo above, so adding another echo to compensate for that
 22                 echo >>"$file_stdio"
 23         fi
 24         diff -up "$FILE_EXPECTED" "$file_stdio" >/dev/null 2>&1 || {
 25                 cat >&2 <<EOF
 26 |--- expecting
 27 $expected<
 28 |--- actual
 29 $(cat $file_stdio)<
 30 |--- END
 31 EOF
 32                 exit 1
 33         }
 34 }
 35 
 36 assertStdoutEquals() {
 37         assertStdioEquals "$1" "$FILE_STDOUT"
 38 }
 39 
 40 assertStderrEquals() {
 41         assertStdioEquals "$1" "$FILE_STDERR"
 42 }
 43 
 44 test_bad_json() {
 45         cat >"$JSON_SCRIPT" <<-EOF
 46         [
 47                 [ ]
 48                 [ ]
 49         ]
 50         EOF
 51         call_json_script
 52         assertStderrEquals "load JSON data from $JSON_SCRIPT failed."
 53 }
 54 
 55 test_expr_eq() {
 56         cat >"$JSON_SCRIPT" <<-EOF
 57         [
 58                 [ "if",
 59                         [ "eq", "VAR", "foo" ],
 60                         [ "echo", "bar" ],
 61                         [ "echo", "baz" ]
 62                 ]
 63         ]
 64         EOF
 65         call_json_script "VAR=foo"
 66         assertStdoutEquals "echo bar"
 67         call_json_script "VAR=xxx"
 68         assertStdoutEquals "echo baz"
 69 }
 70 
 71 test_expr_has() {
 72         cat >"$JSON_SCRIPT" <<-EOF
 73         [
 74                 [ "if",
 75                         [ "has", "VAR" ],
 76                         [ "echo", "bar" ],
 77                         [ "echo", "baz" ]
 78                 ]
 79         ]
 80         EOF
 81         call_json_script "VAR=foo"
 82         assertStdoutEquals "echo bar"
 83         call_json_script
 84         assertStdoutEquals "echo baz"
 85 }
 86 
 87 test_expr_regex_single() {
 88         cat >"$JSON_SCRIPT" <<-EOF
 89         [
 90                 [ "if",
 91                         [ "regex", "VAR", ".ell." ],
 92                         [ "echo", "bar" ],
 93                         [ "echo", "baz" ]
 94                 ]
 95         ]
 96         EOF
 97         call_json_script "VAR=hello"
 98         assertStdoutEquals "echo bar"
 99         call_json_script "VAR=.ell."
100         assertStdoutEquals "echo bar"
101         call_json_script
102         assertStdoutEquals "echo baz"
103         call_json_script "VAR="
104         assertStdoutEquals "echo baz"
105         call_json_script "VAR=hell"
106         assertStdoutEquals "echo baz"
107 }
108 
109 test_expr_regex_multi() {
110         cat >"$JSON_SCRIPT" <<-EOF
111         [
112                 [ "if",
113                         [ "regex", "VAR", [ ".ell.", "w.rld" ] ],
114                         [ "echo", "bar" ],
115                         [ "echo", "baz" ]
116                 ]
117         ]
118         EOF
119         call_json_script "VAR=hello"
120         assertStdoutEquals "echo bar"
121         call_json_script "VAR=world"
122         assertStdoutEquals "echo bar"
123         call_json_script "VAR=.ell."
124         assertStdoutEquals "echo bar"
125         call_json_script "VAR=w.rld"
126         assertStdoutEquals "echo bar"
127         call_json_script
128         assertStdoutEquals "echo baz"
129         call_json_script "VAR="
130         assertStdoutEquals "echo baz"
131         call_json_script "VAR=hell"
132         assertStdoutEquals "echo baz"
133 }
134 
135 test_expr_not() {
136         cat >"$JSON_SCRIPT" <<-EOF
137         [
138                 [ "if",
139                         [ "not", [ "has", "VAR" ] ],
140                         [ "echo", "bar" ],
141                         [ "echo", "baz" ]
142                 ]
143         ]
144         EOF
145         call_json_script "VAR=foo"
146         assertStdoutEquals "echo baz"
147         call_json_script
148         assertStdoutEquals "echo bar"
149 }
150 
151 test_expr_and() {
152         cat >"$JSON_SCRIPT" <<-EOF
153         [
154                 [ "if",
155                         [ "and", [ "eq", "EQVAR", "eqval" ],
156                                          [ "regex", "REGEXVAR", "regex..." ]
157                         ],
158                         [ "echo", "bar" ],
159                         [ "echo", "baz" ]
160                 ]
161         ]
162         EOF
163         call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
164         assertStdoutEquals "echo bar"
165         call_json_script "EQVAR=foo"
166         assertStdoutEquals "echo baz"
167         call_json_script "REGEXVAR=regex***"
168         assertStdoutEquals "echo baz"
169         call_json_script
170         assertStdoutEquals "echo baz"
171 }
172 
173 test_expr_or() {
174         cat >"$JSON_SCRIPT" <<-EOF
175         [
176                 [ "if",
177                         [ "or", [ "not", [ "eq", "EQVAR", "eqval" ] ],
178                                         [ "regex", "REGEXVAR", [ "regexva.[0-9]", "regexva.[a-z]" ] ]
179                         ],
180                         [ "echo", "bar" ],
181                         [ "echo", "baz" ]
182                 ]
183         ]
184         EOF
185         call_json_script "EQVAR=eqval" "REGEXVAR=regexval1"
186         assertStdoutEquals "echo bar"
187         call_json_script "EQVAR=neq" "REGEXVAR=sxc"
188         assertStdoutEquals "echo bar"
189         call_json_script "REGEXVAR=sxc"
190         assertStdoutEquals "echo bar"
191         call_json_script "EQVAR=foo"
192         assertStdoutEquals "echo bar"
193         call_json_script
194         assertStdoutEquals "echo bar"
195         call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
196         assertStdoutEquals "echo baz"
197 }
198 
199 test_expr_isdir() {
200         cat >"$JSON_SCRIPT" <<-EOF
201         [
202                 [ "if",
203                         [ "isdir", "%VAR%" ],
204                         [ "echo", "bar" ],
205                         [ "echo", "baz" ]
206                 ]
207         ]
208         EOF
209         call_json_script "VAR=/"
210         assertStdoutEquals "echo bar"
211         call_json_script "VAR=$(mktemp -u)"
212         assertStdoutEquals "echo baz"
213         call_json_script
214         assertStdoutEquals "echo baz"
215 }
216 
217 test_cmd_case() {
218         cat >"$JSON_SCRIPT" <<-EOF
219         [
220                 [ "case", "CASEVAR", {
221                         "0": [ "echo", "foo" ],
222                         "1": [
223                                 [ "echo", "bar" ],
224                                 [ "echo", "baz" ]
225                         ],
226                         "%VAR%": [ "echo", "quz" ]
227                 } ]
228         ]
229         EOF
230         call_json_script "CASEVAR=0"
231         assertStdoutEquals "echo foo"
232         call_json_script "CASEVAR=1"
233         assertStdoutEquals "echo bar
234 echo baz"
235         call_json_script "CASEVAR=%VAR%"
236         assertStdoutEquals "echo quz"
237         call_json_script "CASEVAR="
238         assertStdoutEquals ""
239         call_json_script
240         assertStdoutEquals ""
241         call_json_script "CASEVAR=xxx" "VAR=xxx"
242         assertStdoutEquals ""
243 }
244 
245 test_cmd_if() {
246         cat >"$JSON_SCRIPT" <<-EOF
247         [
248                 [ "if",
249                         [ "eq", "VAR", "foo" ],
250                         [ "echo", "bar" ],
251                         [ "echo", "baz" ]
252                 ]
253         ]
254         EOF
255         call_json_script "VAR=foo"
256         assertStdoutEquals "echo bar"
257         call_json_script "VAR=xxx"
258         assertStdoutEquals "echo baz"
259 }
260 
261 test_cmd_cb() {
262         cat >"$JSON_SCRIPT" <<-EOF
263         [
264                 [ "exec", "%VAR%", "/%VAS%%%/" ]
265         ]
266         EOF
267         call_json_script
268         assertStdoutEquals "exec  /%/"
269         call_json_script "VAR="
270         assertStdoutEquals "exec  /%/"
271         call_json_script "VAR=qux" "VAS=3"
272         assertStdoutEquals "exec qux /3%/"
273 }
274 
275 test_cmd_return() {
276         cat >"$JSON_SCRIPT" <<-EOF
277         [
278                 [ "heh", "%HEHVAR%" ],
279                 [ "%VAR%", "%VAR%" ],
280                 [ "return" ],
281                 [ "exec_non_reachable", "Arghhh" ]
282         ]
283         EOF
284         call_json_script "HEHVAR=dude" "VAR=ow"
285         assertStdoutEquals "heh dude
286 %VAR% ow"
287 }
288 
289 test_jshn_append_no_leading_space() {
290         JSON_PREFIX="${JSON_PREFIX:-}"
291         . ../../sh/jshn.sh
292 
293         # Test appending to empty variable - should not have leading space
294         var=''
295         _jshn_append var 'foo'
296         assertEquals "foo" "$var"
297 
298         # Test appending to non-empty variable - should have space separator
299         var='bar'
300         _jshn_append var 'foo'
301         assertEquals "bar foo" "$var"
302 
303         # Test multiple appends to empty variable
304         var=''
305         _jshn_append var 'first'
306         _jshn_append var 'second'
307         assertEquals "first second" "$var"
308 }
309 
310 test_jshn_dump() {
311         JSON_PREFIX="${JSON_PREFIX:-}"
312         . ../../sh/jshn.sh
313 
314         set +u
315 
316         json_init
317 
318         assertEquals '{ }' "$(json_dump)"
319 
320         set -u
321 }
322 
323 test_jshn_add_string() {
324         JSON_PREFIX="${JSON_PREFIX:-}"
325         . ../../sh/jshn.sh
326 
327         set +u
328 
329         json_init
330 
331         json_add_string "name" "joe"
332 
333         assertEquals '{ "name": "joe" }' "$(json_dump)"
334 
335         set -u
336 }
337 
338 test_jshn_add_int() {
339         JSON_PREFIX="${JSON_PREFIX:-}"
340         . ../../sh/jshn.sh
341 
342         set +u
343 
344         json_init
345 
346         json_add_int "number" 1
347 
348         assertEquals '{ "number": 1 }' "$(json_dump)"
349 
350         set -u
351 }
352 
353 test_jshn_add_boolean() {
354         JSON_PREFIX="${JSON_PREFIX:-}"
355         . ../../sh/jshn.sh
356 
357         set +u
358 
359         json_init
360 
361         json_add_boolean "done" false
362 
363         assertEquals '{ "done": false }' "$(json_dump)"
364 
365         set -u
366 }
367 
368 test_jshn_add_double() {
369         JSON_PREFIX="${JSON_PREFIX:-}"
370         . ../../sh/jshn.sh
371 
372         set +u
373 
374         json_init
375 
376         json_add_double "power" 1.605
377 
378         assertEquals '{ "power": 1.605 }' "$(json_dump)"
379 
380         set -u
381 }
382 
383 test_jshn_add_null() {
384         JSON_PREFIX="${JSON_PREFIX:-}"
385         . ../../sh/jshn.sh
386 
387         set +u
388 
389         json_init
390 
391         json_add_null "reference"
392 
393         assertEquals '{ "reference": null }' "$(json_dump)"
394 
395         set -u
396 }
397 
398 test_jshn_add_object() {
399         JSON_PREFIX="${JSON_PREFIX:-}"
400         . ../../sh/jshn.sh
401 
402         set +u
403 
404         json_init
405 
406         json_add_object "inventory"
407 
408         json_add_int "apples" 61
409         json_add_int "pears" 42
410         json_add_int "melons" 5
411 
412         json_close_object # inventory
413 
414         assertEquals '{ "inventory": { "apples": 61, "pears": 42, "melons": 5 } }' "$(json_dump)"
415 
416         set -u
417 }
418 
419 test_jshn_add_array() {
420         JSON_PREFIX="${JSON_PREFIX:-}"
421         . ../../sh/jshn.sh
422 
423         set +u
424 
425         json_init
426 
427         json_add_array "interfaces"
428 
429         json_add_string "" "eth0"
430         json_add_string "" "eth1"
431         json_add_string "" "eth2"
432 
433         json_close_array # interfaces
434 
435         assertEquals '{ "interfaces": [ "eth0", "eth1", "eth2" ] }' "$(json_dump)"
436 
437         set -u
438 }
439 
440 test_jshn_add_multi() {
441         JSON_PREFIX="${JSON_PREFIX:-}"
442         . ../../sh/jshn.sh
443 
444         set +u
445 
446         json_init
447 
448         json_add_fields "name:string=joe" "age:int=42" "veteran:boolean=false"
449 
450         assertEquals '{ "name": "joe", "age": 42, "veteran": false }' "$(json_dump)"
451 
452         set -u
453 }
454 
455 test_jshn_append_via_json_script() {
456         JSON_PREFIX="${JSON_PREFIX:-}"
457         . ../../sh/jshn.sh
458 
459         # __SHUNIT_SHELL_FLAGS='u' results in 'line 6: JSON_UNSET: unbound variable' in json_cleanup()
460         set +u
461 
462         # Test appending first key to empty variable without leading space
463         json_init
464         json_add_string "first" "value1"
465         json_get_keys keys
466         assertEquals "first" "$keys"
467 
468         # Test appending second key should maintain no leading space on first key
469         json_add_string "second" "value2"
470         json_get_keys keys
471         assertEquals "first second" "$keys"
472         set -u
473 }
474 
475 test_jshn_get_index() {
476         JSON_PREFIX="${JSON_PREFIX:-}"
477         . ../../sh/jshn.sh
478 
479         set +u
480 
481         local index
482 
483         json_init
484 
485         json_add_object "DHCP4"
486 
487         json_add_array "networks"
488 
489         json_add_object ""
490         json_get_index index
491         json_add_int "id" 1
492         json_add_string "subnet" "192.168.1.0/24"
493         json_close_object
494 
495         json_add_object ""
496         json_add_int "id" 2
497         json_add_string "subnet" "192.168.2.0/24"
498         json_close_object
499 
500         json_select "$index" # revisit first anonymous object
501         json_add_int "valid-lifetime" 3600
502         json_select .. # pop back into array
503 
504         json_close_array # networks
505 
506         json_close_object # DHCP4
507 
508         assertEquals '{ "DHCP4": { "networks": [ { "id": 1, "subnet": "192.168.1.0\/24", "valid-lifetime": 3600 }, { "id": 2, "subnet": "192.168.2.0\/24" } ] } }' "$(json_dump)"
509 
510         set -u
511 }
512 
513 . ./shunit2/shunit2

This page was automatically generated by LXR 0.3.1.  •  OpenWrt