]>
Commit | Line | Data |
---|---|---|
08d42548 AW |
1 | AT_BANNER([command completion unit tests - bash]) |
2 | ||
3 | m4_define([GET_FORMAT], [ | |
4 | echo "$@" | grep -A 1 -- "Command format" | tail -n+2 | |
5 | ]) | |
6 | ||
7 | m4_define([GET_EXPAN], [ | |
8 | echo "$@" | grep -- "available completions for keyword" \ | |
9 | | sed -e 's/^[ ]*//g;s/[ ]*$//g' | |
10 | ]) | |
11 | ||
12 | m4_define([GET_AVAIL], [ | |
13 | echo "$@" | sed -e '1,/Available/d' | tail -n+2 | |
14 | ]) | |
15 | ||
16 | m4_define([GET_COMP_STR], [ | |
17 | echo "available completions for keyword \"$1\": $2" \ | |
18 | | sed -e 's/[ ]*$//g' | |
19 | ]) | |
20 | ||
21 | AT_SETUP([bash completion - basic verification]) | |
22 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
23 | OVS_VSWITCHD_START | |
24 | ||
25 | # complete ovs-appctl [TAB] | |
26 | # complete ovs-dpctl [TAB] | |
27 | # complete ovs-ofctl [TAB] | |
28 | # complete ovsdb-tool [TAB] | |
29 | m4_foreach( | |
30 | [test_command], | |
31 | [[ovs-appctl], | |
32 | [ovs-dpctl], | |
33 | [ovs-ofctl], | |
34 | [ovsdb-tool]], | |
35 | [ | |
36 | INPUT="$(bash ovs-command-compgen.bash debug test_command TAB 2>&1)" | |
37 | MATCH="$(test_command --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1) | |
38 | $(test_command list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)" | |
39 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
40 | [0], [dnl | |
41 | ${MATCH} | |
42 | ])]) | |
43 | ||
44 | ||
45 | # complete ovs-appctl --tar[TAB] | |
46 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --tar 2>&1)" | |
47 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
48 | [0], [dnl | |
49 | --target | |
50 | ]) | |
51 | ||
52 | ||
53 | # complete ovs-appctl --target [TAB] | |
54 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target TAB 2>&1)" | |
55 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
56 | [0], [dnl | |
57 | ovs-ofctl | |
58 | ovs-vswitchd | |
59 | ovsdb-server | |
60 | ]) | |
61 | ||
62 | ||
63 | # complete ovs-appctl --target ovs-vswitchd [TAB] | |
64 | # complete ovs-appctl --target ovsdb-server [TAB] | |
65 | # complete ovs-appctl --target ovs-ofctl [TAB] | |
66 | AT_CHECK([ovs-ofctl monitor br0 --detach --no-chdir --pidfile]) | |
67 | m4_foreach( | |
68 | [target_daemon], | |
69 | [[ovs-vswitchd], | |
70 | [ovsdb-server], | |
71 | [ovs-ofctl]], | |
72 | [ | |
73 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target target_daemon TAB 2>&1)" | |
74 | MATCH="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1) | |
75 | $(ovs-appctl --target target_daemon list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)" | |
76 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
77 | [0], [dnl | |
78 | ${MATCH} | |
79 | ])]) | |
80 | AT_CHECK([ovs-appctl --target ovs-ofctl exit]) | |
08d42548 AW |
81 | OVS_VSWITCHD_STOP |
82 | AT_CLEANUP | |
83 | ||
84 | ||
85 | # complex completion check - bfd/set-forwarding | |
86 | # bfd/set-forwarding [interface] normal|false|true | |
87 | # test expansion of 'interface' | |
88 | AT_SETUP([bash completion - complex completion check 1]) | |
89 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
90 | OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy) | |
91 | ||
92 | # check the top level completion. | |
93 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding TAB 2>&1)" | |
94 | MATCH="$(GET_COMP_STR([normal], []) | |
95 | GET_COMP_STR([false], []) | |
96 | GET_COMP_STR([true], []) | |
97 | GET_COMP_STR([interface], [p0]))" | |
98 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
99 | [0], [dnl | |
100 | ${MATCH} | |
101 | ]) | |
102 | # check the available completions. | |
103 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
104 | [0], [dnl | |
105 | p0 | |
106 | ]) | |
107 | ||
108 | ||
109 | # set argument to 'true', there should be no more completions. | |
110 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding true TAB 2>&1)" | |
111 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'], | |
112 | [0], [dnl | |
08d42548 AW |
113 | ]) |
114 | ||
115 | ||
116 | # set argument to 'p1', there should still be the completion for booleans. | |
117 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 TAB 2>&1)" | |
118 | MATCH="$(GET_COMP_STR([normal], []) | |
119 | GET_COMP_STR([false], []) | |
120 | GET_COMP_STR([true], []))" | |
121 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
122 | [0], [dnl | |
123 | ${MATCH} | |
124 | ]) | |
125 | # check the available completions. | |
126 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0]) | |
127 | ||
128 | ||
129 | # set argument to 'p1 false', there should still no more completions. | |
130 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 false TAB 2>&1)" | |
131 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'], | |
132 | [0], [dnl | |
08d42548 AW |
133 | ]) |
134 | ||
135 | OVS_VSWITCHD_STOP | |
136 | AT_CLEANUP | |
137 | ||
138 | ||
139 | # complex completion check - lacp/show | |
140 | # lacp/show [port] | |
141 | # test expansion on 'port' | |
142 | AT_SETUP([bash completion - complex completion check 2]) | |
143 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
144 | OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy \ | |
145 | -- add-port br0 p1 -- set Interface p1 type=dummy) | |
146 | ||
147 | # check the top level completion. | |
148 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show TAB 2>&1)" | |
149 | MATCH="$(GET_COMP_STR([port], [br0 p0 p1]))" | |
150 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
151 | [0], [dnl | |
152 | ${MATCH} | |
153 | ]) | |
154 | # check the available completions. | |
155 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
156 | [0], [dnl | |
157 | br0 | |
158 | p0 | |
159 | p1 | |
160 | ]) | |
161 | ||
162 | ||
163 | # set argument to 'p1', there should be no more completions. | |
164 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show p1 TAB 2>&1)" | |
165 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'], | |
166 | [0], [dnl | |
08d42548 AW |
167 | ]) |
168 | ||
169 | OVS_VSWITCHD_STOP | |
170 | AT_CLEANUP | |
171 | ||
172 | ||
173 | # complex completion check - ofproto/trace | |
174 | # ofproto/trace {[dp_name] odp_flow | bridge br_flow} [-generate|packet] | |
175 | # test expansion on 'dp|dp_name' and 'bridge' | |
176 | AT_SETUP([bash completion - complex completion check 3]) | |
177 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
178 | OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy \ | |
179 | -- add-port br0 p1 -- set Interface p1 type=dummy) | |
180 | ||
181 | # check the top level completion. | |
182 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace TAB 2>&1)" | |
183 | MATCH="$(GET_COMP_STR([bridge], [br0]) | |
184 | GET_COMP_STR([odp_flow], []) | |
185 | GET_COMP_STR([dp_name], [ovs-dummy]))" | |
186 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
187 | [0], [dnl | |
188 | ${MATCH} | |
189 | ]) | |
190 | # check the available completions. | |
191 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
192 | [0], [dnl | |
193 | br0 | |
194 | ovs-dummy | |
195 | ]) | |
196 | ||
197 | ||
198 | # set argument to 'ovs-dummy', should go to the dp-name path. | |
199 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy TAB 2>&1)" | |
200 | MATCH="$(GET_COMP_STR([odp_flow], []))" | |
201 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
202 | [0], [dnl | |
203 | ${MATCH} | |
204 | ]) | |
205 | # check the available completions. | |
206 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0]) | |
207 | ||
208 | ||
209 | # set odp_flow to some random string, should go to the next level. | |
210 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" TAB 2>&1)" | |
211 | MATCH="$(GET_COMP_STR([-generate], [-generate]) | |
212 | GET_COMP_STR([packet], []))" | |
213 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
214 | [0], [dnl | |
215 | ${MATCH} | |
216 | ]) | |
217 | # check the available completions. | |
218 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
219 | [0], [dnl | |
220 | -generate | |
221 | ]) | |
222 | ||
223 | ||
224 | # set packet to some random string, there should be no more completions. | |
225 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" "ABSJDFLSDJFOIWEQR" TAB 2>&1)" | |
226 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'], | |
227 | [0], [dnl | |
08d42548 AW |
228 | ]) |
229 | ||
230 | ||
231 | # set argument to 'br0', should go to the bridge path. | |
232 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace br0 TAB 2>&1)" | |
233 | MATCH="$(GET_COMP_STR([br_flow], []))" | |
234 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
235 | [0], [dnl | |
236 | ${MATCH} | |
237 | ]) | |
238 | # check the available completions. | |
239 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0]) | |
240 | ||
241 | ||
242 | # set argument to some random string, should go to the odp_flow path. | |
243 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace "in_port(123),mac(),ip,tcp" TAB 2>&1)" | |
244 | MATCH="$(GET_COMP_STR([-generate], [-generate]) | |
245 | GET_COMP_STR([packet], []))" | |
246 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
247 | [0], [dnl | |
248 | ${MATCH} | |
249 | ]) | |
250 | # check the available completions. | |
251 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
252 | [0], [dnl | |
253 | -generate | |
254 | ]) | |
255 | ||
256 | OVS_VSWITCHD_STOP | |
257 | AT_CLEANUP | |
258 | ||
259 | ||
260 | # complex completion check - vlog/set | |
261 | # vlog/set {spec | PATTERN:destination:pattern} | |
262 | # test non expandable arguments | |
263 | AT_SETUP([bash completion - complex completion check 4]) | |
264 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
265 | OVS_VSWITCHD_START | |
266 | ||
267 | # check the top level completion. | |
268 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set TAB 2>&1)" | |
269 | MATCH="$(GET_COMP_STR([PATTERN:destination:pattern], []) | |
270 | GET_COMP_STR([spec], []))" | |
271 | AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})], | |
272 | [0], [dnl | |
273 | ${MATCH} | |
274 | ]) | |
275 | # check the available completions. | |
276 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0]) | |
277 | ||
278 | ||
279 | # set argument to random 'abcd', there should be no more completions. | |
280 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set abcd TAB 2>&1)" | |
281 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'], | |
282 | [0], [dnl | |
08d42548 AW |
283 | ]) |
284 | ||
285 | OVS_VSWITCHD_STOP | |
286 | AT_CLEANUP | |
287 | ||
288 | ||
289 | AT_SETUP([bash completion - negative test]) | |
290 | AT_SKIP_IF([test -z ${BASH_VERSION+x}]) | |
291 | OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy) | |
292 | ||
293 | # negative test - incorrect subcommand | |
294 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR 2>&1)" | |
295 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./,$!d'], [0]) | |
296 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR TAB 2>&1)" | |
297 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d'], | |
298 | [0], [dnl | |
08d42548 AW |
299 | ]) |
300 | ||
301 | ||
302 | # negative test - no ovs-vswitchd | |
303 | # negative test - no ovsdb-server | |
304 | # negative test - no ovs-ofctl | |
305 | # should not see any error. | |
306 | OVS_VSWITCHD_STOP | |
307 | m4_foreach( | |
308 | [target_daemon], | |
309 | [[ovs-vswitchd], | |
310 | [ovsdb-server], | |
311 | [ovs-ofctl]], | |
312 | [ | |
313 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target target_daemon TAB 2>&1)" | |
314 | MATCH="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)" | |
315 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], | |
316 | [0], [dnl | |
317 | ${MATCH} | |
318 | ]) | |
319 | INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target target_daemon ERROR SUBCMD TAB 2>&1)" | |
320 | AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d'], | |
321 | [0], [dnl | |
08d42548 AW |
322 | ])]) |
323 | ||
324 | ||
325 | # negative test - do not match on nested option | |
326 | INPUT="$(bash ovs-command-compgen.bash debug ovsdb-tool create TAB 2>&1)" | |
327 | AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0]) | |
328 | ||
329 | AT_CLEANUP |