1 // SPDX-License-Identifier: GPL-2.0
10 #include <test/hush.h>
14 * All tests will execute the following:
15 * if condition_to_test; then
20 * If condition is true, command returns 1, 0 otherwise.
22 const char *if_format = "if %s; then true; else false; fi";
24 static int hush_test_if_base(struct unit_test_state *uts)
26 char if_formatted[128];
28 sprintf(if_formatted, if_format, "true");
29 ut_assertok(run_command(if_formatted, 0));
31 sprintf(if_formatted, if_format, "false");
32 ut_asserteq(1, run_command(if_formatted, 0));
36 HUSH_TEST(hush_test_if_base, 0);
38 static int hush_test_if_basic_operators(struct unit_test_state *uts)
40 char if_formatted[128];
42 sprintf(if_formatted, if_format, "test aaa = aaa");
43 ut_assertok(run_command(if_formatted, 0));
45 sprintf(if_formatted, if_format, "test aaa = bbb");
46 ut_asserteq(1, run_command(if_formatted, 0));
48 sprintf(if_formatted, if_format, "test aaa != bbb");
49 ut_assertok(run_command(if_formatted, 0));
51 sprintf(if_formatted, if_format, "test aaa != aaa");
52 ut_asserteq(1, run_command(if_formatted, 0));
54 sprintf(if_formatted, if_format, "test aaa < bbb");
55 ut_assertok(run_command(if_formatted, 0));
57 sprintf(if_formatted, if_format, "test bbb < aaa");
58 ut_asserteq(1, run_command(if_formatted, 0));
60 sprintf(if_formatted, if_format, "test bbb > aaa");
61 ut_assertok(run_command(if_formatted, 0));
63 sprintf(if_formatted, if_format, "test aaa > bbb");
64 ut_asserteq(1, run_command(if_formatted, 0));
66 sprintf(if_formatted, if_format, "test 123 -eq 123");
67 ut_assertok(run_command(if_formatted, 0));
69 sprintf(if_formatted, if_format, "test 123 -eq 456");
70 ut_asserteq(1, run_command(if_formatted, 0));
72 sprintf(if_formatted, if_format, "test 123 -ne 456");
73 ut_assertok(run_command(if_formatted, 0));
75 sprintf(if_formatted, if_format, "test 123 -ne 123");
76 ut_asserteq(1, run_command(if_formatted, 0));
78 sprintf(if_formatted, if_format, "test 123 -lt 456");
79 ut_assertok(run_command(if_formatted, 0));
81 sprintf(if_formatted, if_format, "test 123 -lt 123");
82 ut_asserteq(1, run_command(if_formatted, 0));
84 sprintf(if_formatted, if_format, "test 456 -lt 123");
85 ut_asserteq(1, run_command(if_formatted, 0));
87 sprintf(if_formatted, if_format, "test 123 -le 456");
88 ut_assertok(run_command(if_formatted, 0));
90 sprintf(if_formatted, if_format, "test 123 -le 123");
91 ut_assertok(run_command(if_formatted, 0));
93 sprintf(if_formatted, if_format, "test 456 -le 123");
94 ut_asserteq(1, run_command(if_formatted, 0));
96 sprintf(if_formatted, if_format, "test 456 -gt 123");
97 ut_assertok(run_command(if_formatted, 0));
99 sprintf(if_formatted, if_format, "test 123 -gt 123");
100 ut_asserteq(1, run_command(if_formatted, 0));
102 sprintf(if_formatted, if_format, "test 123 -gt 456");
103 ut_asserteq(1, run_command(if_formatted, 0));
105 sprintf(if_formatted, if_format, "test 456 -ge 123");
106 ut_assertok(run_command(if_formatted, 0));
108 sprintf(if_formatted, if_format, "test 123 -ge 123");
109 ut_assertok(run_command(if_formatted, 0));
111 sprintf(if_formatted, if_format, "test 123 -ge 456");
112 ut_asserteq(1, run_command(if_formatted, 0));
116 HUSH_TEST(hush_test_if_basic_operators, 0);
118 static int hush_test_if_octal(struct unit_test_state *uts)
120 char if_formatted[128];
122 sprintf(if_formatted, if_format, "test 010 -eq 010");
123 ut_assertok(run_command(if_formatted, 0));
125 sprintf(if_formatted, if_format, "test 010 -eq 011");
126 ut_asserteq(1, run_command(if_formatted, 0));
128 sprintf(if_formatted, if_format, "test 010 -ne 011");
129 ut_assertok(run_command(if_formatted, 0));
131 sprintf(if_formatted, if_format, "test 010 -ne 010");
132 ut_asserteq(1, run_command(if_formatted, 0));
136 HUSH_TEST(hush_test_if_octal, 0);
138 static int hush_test_if_hexadecimal(struct unit_test_state *uts)
140 char if_formatted[128];
142 sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x2000001");
143 ut_asserteq(1, run_command(if_formatted, 0));
145 sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x2000000");
146 ut_asserteq(1, run_command(if_formatted, 0));
148 sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x1ffffff");
149 ut_assertok(run_command(if_formatted, 0));
153 HUSH_TEST(hush_test_if_hexadecimal, 0);
155 static int hush_test_if_mixed(struct unit_test_state *uts)
157 char if_formatted[128];
159 sprintf(if_formatted, if_format, "test 010 -eq 10");
160 ut_asserteq(1, run_command(if_formatted, 0));
162 sprintf(if_formatted, if_format, "test 010 -ne 10");
163 ut_assertok(run_command(if_formatted, 0));
165 sprintf(if_formatted, if_format, "test 0xa -eq 10");
166 ut_assertok(run_command(if_formatted, 0));
168 sprintf(if_formatted, if_format, "test 0xa -eq 012");
169 ut_assertok(run_command(if_formatted, 0));
171 sprintf(if_formatted, if_format, "test 2000000 -gt 0x1ffffff");
172 ut_asserteq(1, run_command(if_formatted, 0));
174 sprintf(if_formatted, if_format, "test 0x2000000 -gt 1ffffff");
175 ut_assertok(run_command(if_formatted, 0));
177 sprintf(if_formatted, if_format, "test 0x2000000 -lt 1ffffff");
178 ut_asserteq(1, run_command(if_formatted, 0));
180 sprintf(if_formatted, if_format, "test 0x2000000 -eq 2000000");
181 ut_asserteq(1, run_command(if_formatted, 0));
183 sprintf(if_formatted, if_format, "test 0x2000000 -ne 2000000");
184 ut_assertok(run_command(if_formatted, 0));
186 sprintf(if_formatted, if_format, "test -z \"\"");
187 ut_assertok(run_command(if_formatted, 0));
189 sprintf(if_formatted, if_format, "test -z \"aaa\"");
190 ut_asserteq(1, run_command(if_formatted, 0));
192 sprintf(if_formatted, if_format, "test -n \"aaa\"");
193 ut_assertok(run_command(if_formatted, 0));
195 sprintf(if_formatted, if_format, "test -n \"\"");
196 ut_asserteq(1, run_command(if_formatted, 0));
200 HUSH_TEST(hush_test_if_mixed, 0);
202 static int hush_test_if_inverted(struct unit_test_state *uts)
204 char if_formatted[128];
206 sprintf(if_formatted, if_format, "test ! aaa = aaa");
207 ut_asserteq(1, run_command(if_formatted, 0));
209 sprintf(if_formatted, if_format, "test ! aaa = bbb");
210 ut_assertok(run_command(if_formatted, 0));
212 sprintf(if_formatted, if_format, "test ! ! aaa = aaa");
213 ut_assertok(run_command(if_formatted, 0));
215 sprintf(if_formatted, if_format, "test ! ! aaa = bbb");
216 ut_asserteq(1, run_command(if_formatted, 0));
220 HUSH_TEST(hush_test_if_inverted, 0);
222 static int hush_test_if_binary(struct unit_test_state *uts)
224 char if_formatted[128];
226 sprintf(if_formatted, if_format, "test aaa != aaa -o bbb != bbb");
227 ut_asserteq(1, run_command(if_formatted, 0));
229 sprintf(if_formatted, if_format, "test aaa != aaa -o bbb = bbb");
230 ut_assertok(run_command(if_formatted, 0));
232 sprintf(if_formatted, if_format, "test aaa = aaa -o bbb != bbb");
233 ut_assertok(run_command(if_formatted, 0));
235 sprintf(if_formatted, if_format, "test aaa = aaa -o bbb = bbb");
236 ut_assertok(run_command(if_formatted, 0));
238 sprintf(if_formatted, if_format, "test aaa != aaa -a bbb != bbb");
239 ut_asserteq(1, run_command(if_formatted, 0));
241 sprintf(if_formatted, if_format, "test aaa != aaa -a bbb = bbb");
242 ut_asserteq(1, run_command(if_formatted, 0));
244 sprintf(if_formatted, if_format, "test aaa = aaa -a bbb != bbb");
245 ut_asserteq(1, run_command(if_formatted, 0));
247 sprintf(if_formatted, if_format, "test aaa = aaa -a bbb = bbb");
248 ut_assertok(run_command(if_formatted, 0));
252 HUSH_TEST(hush_test_if_binary, 0);
254 static int hush_test_if_inverted_binary(struct unit_test_state *uts)
256 char if_formatted[128];
258 sprintf(if_formatted, if_format, "test ! aaa != aaa -o ! bbb != bbb");
259 ut_assertok(run_command(if_formatted, 0));
261 sprintf(if_formatted, if_format, "test ! aaa != aaa -o ! bbb = bbb");
262 ut_assertok(run_command(if_formatted, 0));
264 sprintf(if_formatted, if_format, "test ! aaa = aaa -o ! bbb != bbb");
265 ut_assertok(run_command(if_formatted, 0));
267 sprintf(if_formatted, if_format, "test ! aaa = aaa -o ! bbb = bbb");
268 ut_asserteq(1, run_command(if_formatted, 0));
270 sprintf(if_formatted, if_format,
271 "test ! ! aaa != aaa -o ! ! bbb != bbb");
272 ut_asserteq(1, run_command(if_formatted, 0));
274 sprintf(if_formatted, if_format,
275 "test ! ! aaa != aaa -o ! ! bbb = bbb");
276 ut_assertok(run_command(if_formatted, 0));
278 sprintf(if_formatted, if_format,
279 "test ! ! aaa = aaa -o ! ! bbb != bbb");
280 ut_assertok(run_command(if_formatted, 0));
282 sprintf(if_formatted, if_format, "test ! ! aaa = aaa -o ! ! bbb = bbb");
283 ut_assertok(run_command(if_formatted, 0));
287 HUSH_TEST(hush_test_if_inverted_binary, 0);
289 static int hush_test_if_z_operator(struct unit_test_state *uts)
291 char if_formatted[128];
293 /* Deal with environment variable used during test. */
294 env_set("ut_var_nonexistent", NULL);
295 env_set("ut_var_exists", "1");
296 env_set("ut_var_unset", "1");
298 sprintf(if_formatted, if_format, "test -z \"$ut_var_nonexistent\"");
299 ut_assertok(run_command(if_formatted, 0));
301 sprintf(if_formatted, if_format, "test -z \"$ut_var_exists\"");
302 ut_asserteq(1, run_command(if_formatted, 0));
304 sprintf(if_formatted, if_format, "test -z \"$ut_var_unset\"");
305 ut_asserteq(1, run_command(if_formatted, 0));
307 env_set("ut_var_unset", NULL);
308 sprintf(if_formatted, if_format, "test -z \"$ut_var_unset\"");
309 ut_assertok(run_command(if_formatted, 0));
311 /* Clear the set environment variable. */
312 env_set("ut_var_exists", NULL);
316 HUSH_TEST(hush_test_if_z_operator, 0);