libubox
C utility functions for OpenWrt.
json_script-tests.sh
Go to the documentation of this file.
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