]> git.proxmox.com Git - mirror_ovs.git/blame - tests/completion.at
ovn: specify addresses of type "router" lsps as "router"
[mirror_ovs.git] / tests / completion.at
CommitLineData
94ace6ff 1AT_BANNER([appctl bashcomp unit tests])
08d42548
AW
2
3m4_define([GET_FORMAT], [
4echo "$@" | grep -A 1 -- "Command format" | tail -n+2
5])
6
7m4_define([GET_EXPAN], [
8echo "$@" | grep -- "available completions for keyword" \
9 | sed -e 's/^[ ]*//g;s/[ ]*$//g'
10])
11
12m4_define([GET_AVAIL], [
13echo "$@" | sed -e '1,/Available/d' | tail -n+2
14])
15
16m4_define([GET_COMP_STR], [
17echo "available completions for keyword \"$1\": $2" \
18 | sed -e 's/[ ]*$//g'
19])
20
94ace6ff 21AT_SETUP([appctl-bashcomp - basic verification])
08d42548
AW
22AT_SKIP_IF([test -z ${BASH_VERSION+x}])
23OVS_VSWITCHD_START
24
25# complete ovs-appctl [TAB]
26# complete ovs-dpctl [TAB]
27# complete ovs-ofctl [TAB]
28# complete ovsdb-tool [TAB]
29m4_foreach(
30[test_command],
31[[ovs-appctl],
32[ovs-dpctl],
33[ovs-ofctl],
34[ovsdb-tool]],
35[
94ace6ff 36INPUT="$(bash ovs-appctl-bashcomp.bash debug test_command TAB 2>&1)"
08d42548
AW
37MATCH="$(test_command --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)
38$(test_command list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)"
39AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
40[0], [dnl
41${MATCH}
42])])
43
44
45# complete ovs-appctl --tar[TAB]
94ace6ff 46INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --tar 2>&1)"
08d42548
AW
47AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
48[0], [dnl
49--target
50])
51
52
53# complete ovs-appctl --target [TAB]
94ace6ff 54INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --target TAB 2>&1)"
08d42548
AW
55AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
56[0], [dnl
57ovs-ofctl
58ovs-vswitchd
59ovsdb-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]
66AT_CHECK([ovs-ofctl monitor br0 --detach --no-chdir --pidfile])
67m4_foreach(
68[target_daemon],
69[[ovs-vswitchd],
70[ovsdb-server],
71[ovs-ofctl]],
72[
94ace6ff 73INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --target target_daemon TAB 2>&1)"
08d42548
AW
74MATCH="$(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)"
76AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
77[0], [dnl
78${MATCH}
79])])
d9c8c57c 80OVS_APP_EXIT_AND_WAIT([ovs-ofctl])
08d42548
AW
81OVS_VSWITCHD_STOP
82AT_CLEANUP
83
84
85# complex completion check - bfd/set-forwarding
86# bfd/set-forwarding [interface] normal|false|true
87# test expansion of 'interface'
94ace6ff 88AT_SETUP([appctl-bashcomp - complex completion check 1])
08d42548
AW
89AT_SKIP_IF([test -z ${BASH_VERSION+x}])
90OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy)
91
92# check the top level completion.
94ace6ff 93INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding TAB 2>&1)"
08d42548
AW
94MATCH="$(GET_COMP_STR([normal], [])
95GET_COMP_STR([false], [])
96GET_COMP_STR([true], [])
97GET_COMP_STR([interface], [p0]))"
98AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
99[0], [dnl
100${MATCH}
101])
102# check the available completions.
103AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
104[0], [dnl
105p0
106])
107
108
109# set argument to 'true', there should be no more completions.
94ace6ff 110INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding true TAB 2>&1)"
08d42548
AW
111AT_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.
94ace6ff 117INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding p1 TAB 2>&1)"
08d42548
AW
118MATCH="$(GET_COMP_STR([normal], [])
119GET_COMP_STR([false], [])
120GET_COMP_STR([true], []))"
121AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
122[0], [dnl
123${MATCH}
124])
125# check the available completions.
126AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
127
128
129# set argument to 'p1 false', there should still no more completions.
94ace6ff 130INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding p1 false TAB 2>&1)"
08d42548
AW
131AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
132[0], [dnl
08d42548
AW
133])
134
135OVS_VSWITCHD_STOP
136AT_CLEANUP
137
138
139# complex completion check - lacp/show
140# lacp/show [port]
141# test expansion on 'port'
94ace6ff 142AT_SETUP([appctl-bashcomp - complex completion check 2])
08d42548
AW
143AT_SKIP_IF([test -z ${BASH_VERSION+x}])
144OVS_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.
94ace6ff 148INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl lacp/show TAB 2>&1)"
08d42548
AW
149MATCH="$(GET_COMP_STR([port], [br0 p0 p1]))"
150AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
151[0], [dnl
152${MATCH}
153])
154# check the available completions.
155AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
156[0], [dnl
157br0
158p0
159p1
160])
161
162
163# set argument to 'p1', there should be no more completions.
94ace6ff 164INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl lacp/show p1 TAB 2>&1)"
08d42548
AW
165AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
166[0], [dnl
08d42548
AW
167])
168
169OVS_VSWITCHD_STOP
170AT_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'
94ace6ff 176AT_SETUP([appctl-bashcomp - complex completion check 3])
08d42548
AW
177AT_SKIP_IF([test -z ${BASH_VERSION+x}])
178OVS_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.
94ace6ff 182INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace TAB 2>&1)"
08d42548
AW
183MATCH="$(GET_COMP_STR([bridge], [br0])
184GET_COMP_STR([odp_flow], [])
185GET_COMP_STR([dp_name], [ovs-dummy]))"
186AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
187[0], [dnl
188${MATCH}
189])
190# check the available completions.
191AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
192[0], [dnl
193br0
194ovs-dummy
195])
196
197
198# set argument to 'ovs-dummy', should go to the dp-name path.
94ace6ff 199INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace ovs-dummy TAB 2>&1)"
08d42548
AW
200MATCH="$(GET_COMP_STR([odp_flow], []))"
201AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
202[0], [dnl
203${MATCH}
204])
205# check the available completions.
206AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
207
208
209# set odp_flow to some random string, should go to the next level.
94ace6ff 210INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" TAB 2>&1)"
08d42548
AW
211MATCH="$(GET_COMP_STR([-generate], [-generate])
212GET_COMP_STR([packet], []))"
213AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
214[0], [dnl
215${MATCH}
216])
217# check the available completions.
218AT_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.
94ace6ff 225INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" "ABSJDFLSDJFOIWEQR" TAB 2>&1)"
08d42548
AW
226AT_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.
94ace6ff 232INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace br0 TAB 2>&1)"
08d42548
AW
233MATCH="$(GET_COMP_STR([br_flow], []))"
234AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
235[0], [dnl
236${MATCH}
237])
238# check the available completions.
239AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
240
241
242# set argument to some random string, should go to the odp_flow path.
94ace6ff 243INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace "in_port(123),mac(),ip,tcp" TAB 2>&1)"
08d42548
AW
244MATCH="$(GET_COMP_STR([-generate], [-generate])
245GET_COMP_STR([packet], []))"
246AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
247[0], [dnl
248${MATCH}
249])
250# check the available completions.
251AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
252[0], [dnl
253-generate
254])
255
256OVS_VSWITCHD_STOP
257AT_CLEANUP
258
259
260# complex completion check - vlog/set
261# vlog/set {spec | PATTERN:destination:pattern}
262# test non expandable arguments
94ace6ff 263AT_SETUP([appctl-bashcomp - complex completion check 4])
08d42548
AW
264AT_SKIP_IF([test -z ${BASH_VERSION+x}])
265OVS_VSWITCHD_START
266
267# check the top level completion.
94ace6ff 268INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl vlog/set TAB 2>&1)"
08d42548
AW
269MATCH="$(GET_COMP_STR([PATTERN:destination:pattern], [])
270GET_COMP_STR([spec], []))"
271AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
272[0], [dnl
273${MATCH}
274])
275# check the available completions.
276AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
277
278
279# set argument to random 'abcd', there should be no more completions.
94ace6ff 280INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl vlog/set abcd TAB 2>&1)"
08d42548
AW
281AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
282[0], [dnl
08d42548
AW
283])
284
285OVS_VSWITCHD_STOP
286AT_CLEANUP
287
288
94ace6ff 289AT_SETUP([appctl-bashcomp - negative test])
08d42548
AW
290AT_SKIP_IF([test -z ${BASH_VERSION+x}])
291OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy)
292
293# negative test - incorrect subcommand
94ace6ff 294INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ERROR 2>&1)"
08d42548 295AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./,$!d'], [0])
94ace6ff 296INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ERROR TAB 2>&1)"
08d42548
AW
297AT_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.
306OVS_VSWITCHD_STOP
307m4_foreach(
308[target_daemon],
309[[ovs-vswitchd],
310[ovsdb-server],
311[ovs-ofctl]],
312[
94ace6ff 313INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --target target_daemon TAB 2>&1)"
08d42548
AW
314MATCH="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)"
315AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
316[0], [dnl
317${MATCH}
318])
94ace6ff 319INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --target target_daemon ERROR SUBCMD TAB 2>&1)"
08d42548
AW
320AT_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
94ace6ff 326INPUT="$(bash ovs-appctl-bashcomp.bash debug ovsdb-tool create TAB 2>&1)"
08d42548
AW
327AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
328
557570fa
AW
329AT_CLEANUP
330
331
332dnl ----------------------------------------------------------------------
333AT_BANNER([vsctl bashcomp unit tests])
334
335m4_define([PREPARE_MATCH_NOSPACE], [
336echo "$@" | tr ' ' '\n' | sed -e '/^$/d' | sort -u
337])
338
339m4_define([PREPARE_MATCH_SPACE], [
340echo "$@" | tr ' ' '\n' | sed -e '/^$/d' | sed -e 's/$/ /g' | sort -u
341])
342
343AT_SETUP([vsctl-bashcomp - basic verification])
622aff96
YT
344AT_SKIP_IF([test -z ${BASH_VERSION+x}])
345AT_SKIP_IF([eval 'test ${BASH_VERSINFO[[0]]} -lt 4'])
557570fa
AW
346OVS_VSWITCHD_START
347
348# complete ovs-vsctl --db=* [TAB]
349TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')
350$(ovs-vsctl --options | grep -- '--' | sed -e 's/=.*$/=/g')"
351MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
352AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=unix:$OVS_RUNDIR/db.sock "],
353[0], [dnl
354${MATCH}
355])
356# complete ovs-vsctl [TAB]
357AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
358[0], [dnl
359${MATCH}
360])
361
362# complete on global options.
363AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run "],
364[0], [dnl
365${MATCH}
366])
367AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run --pretty "],
368[0], [dnl
369${MATCH}
370])
371
372# complete on local options.
373TMP="$(ovs-vsctl --commands | grep -- '--may-exist' | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n' | grep -v -- '--may-exist')"
374MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
375AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--may-exist "],
376[0], [dnl
377${MATCH}
378])
379
380#
381# test !, +, ?, *.
382#
383# test !. no following arguments are expanded.
384TMP="$(ovsdb-client --no-heading list-tables)"
385MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
386AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
387[0], [dnl
388${MATCH}
389])
390# test ?. will show completions for both current and following arguments.
391ovs-vsctl br-set-external-id br0 bridge-id br0
392MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
393AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
394[0], [dnl
395${MATCH}
396])
397# test *. argument with this prefix could be completed for zero or more times.
398TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
399MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
400AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge "],
401[0], [dnl
402${MATCH}
403])
404AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge br0 "],
405[0], [dnl
406${MATCH}
407])
408# test +. the first time, an argument is required, after that, it becomes '*'.
409TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
410MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
411AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
412[0], [dnl
413${MATCH}
414])
415MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
416AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_key=123 "],
417[0], [dnl
418${MATCH}
419])
420
421OVS_VSWITCHD_STOP
422AT_CLEANUP
423
424
425AT_SETUP([vsctl-bashcomp - argument completion])
622aff96
YT
426AT_SKIP_IF([test -z ${BASH_VERSION+x}])
427AT_SKIP_IF([eval 'test ${BASH_VERSINFO[[0]]} -lt 4'])
557570fa
AW
428OVS_VSWITCHD_START(
429 [add-br br1 -- \
430 set bridge br1 datapath-type=dummy -- \
431 add-br foo -- \
432 set bridge foo datapath-type=dummy -- \
433 add-br --weird-br_name -- \
434 set bridge --weird-br_name datapath-type=dummy -- \
435 add-port br0 br0p0 -- set Interface br0p0 type=dummy -- \
436 add-port br0 br0p1 -- set Interface br0p1 type=dummy -- \
437 add-port br1 br1p0 -- set Interface br1p0 type=dummy -- \
438 add-port br1 br1p1 -- set Interface br1p1 type=dummy -- \
439 add-port foo bar -- set Interface bar type=dummy ])
440#
441# test completion functions defined in '_OVS_VSCTL_ARG_COMPLETION_FUNCS'.
442# therein, the different argument prefixes are also tested at the same time.
443#
444# A space is appended to each output if completion is configured without
445# 'nospace' option.
446#
447
448
449#
450# test: _ovs_vsctl_complete_table
451#
452TMP="$(ovsdb-client --no-heading list-tables)"
453MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
454AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
455[0], [dnl
456${MATCH}
457])
458MATCH="$(PREPARE_MATCH_SPACE(Open_vSwitch))"
459AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open"],
460[0], [dnl
461${MATCH}
462])
463
464
465#
466# test: _ovs_vsctl_complete_record
467#
468TMP="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d '\"')"
469MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
470AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open_vSwitch "],
471[0], [dnl
472${MATCH}
473])
474TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
475MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
476AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge "],
477[0], [dnl
478${MATCH}
479])
480
481
482#
483# test: _ovs_vsctl_complete_bridge
484#
485TMP="$(ovs-vsctl list-br)"
486MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
487AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan "],
488[0], [dnl
489${MATCH}
490])
491# this also helps check the '_ovs_vsctl_check_startswith_string'.
492MATCH="$(PREPARE_MATCH_SPACE(--weird-br_name))"
493AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan --"],
494[0], [dnl
495${MATCH}
496])
497
498
499#
500# test: _ovs_vsctl_complete_port
501#
502TMP="$(ovs-vsctl --no-heading --columns=name list Port | tr -d '\"')"
503MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
504AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "port-to-br "],
505[0], [dnl
506${MATCH}
507])
508# complete on ports in particular bridge.
509TMP="$(ovs-vsctl list-ports br0)"
510MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
511AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "del-port br0 "],
512[0], [dnl
513${MATCH}
514])
515
516
517#
518# test: _ovs_vsctl_complete_iface
519#
520for br in `ovs-vsctl list-br`; do
521 TMP="${TMP} $(ovs-vsctl list-ifaces $br)"
522done
523MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
524AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "iface-to-br "],
525[0], [dnl
526${MATCH}
527])
528
529
530#
531# test: _ovs_vsctl_complete_bridge_fail_mode
532#
533MATCH="$(PREPARE_MATCH_SPACE(standalone secure))"
534AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-fail-mode br0 "],
535[0], [dnl
536${MATCH}
537])
538
539
540#
541# test: _ovs_vsctl_complete_key
542#
543AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
544[0], [dnl
545
546])
547# since there is no key added yet, we will only get our own input.
548MATCH="$(PREPARE_MATCH_SPACE(test_key))"
549AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 test_key"],
550[0], [dnl
551${MATCH}
552])
553# now add a key, as we should see it.
554ovs-vsctl br-set-external-id br0 bridge-id br0
555MATCH="$(PREPARE_MATCH_SPACE(bridge-id))"
556AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
557[0], [dnl
558${MATCH}
559])
560MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
561AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
562[0], [dnl
563${MATCH}
564])
565
566
567#
568# test: _ovs_vsctl_complete_value
569#
570# should just return the user input.
571MATCH="$(PREPARE_MATCH_SPACE(test_value --))"
572AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 bridge-id test_value"],
573[0], [dnl
574${MATCH}
575])
576
577
578#
579# test: _ovs_vsctl_complete_column
580#
581TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Open_vSwitch | tr -d ':' | cut -d' ' -f1)"
582UUID="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d ' ')"
583MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
584AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Open_vSwitch $UUID "],
585[0], [dnl
586${MATCH}
587])
588TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | tr -d ':' | cut -d' ' -f1)"
589MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
590AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 "],
591[0], [dnl
592${MATCH}
593])
594# the 'clear' command requires one or more (+) COLUMN.
595# so, with one specified COLUMN 'other_config', it should still complete on
596# COLUMNs, plus '--'.
597MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
598AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 other_config "],
599[0], [dnl
600${MATCH}
601])
602
603
604#
605# test: _ovs_vsctl_complete_key_value
606#
607# with no key available, should always get user input.
608MATCH="$(PREPARE_MATCH_NOSPACE(random_key))"
609AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key"],
610[0], [dnl
611${MATCH}
612])
bb5dbe78 613MATCH="$(PREPARE_MATCH_NOSPACE(abc))"
557570fa
AW
614AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key=abc"],
615[0], [dnl
616${MATCH}
617])
618# now add two random keys.
619ovs-vsctl set Bridge br0 other_config:random_key1=abc other_config:random_val1=xyz
620MATCH="$(PREPARE_MATCH_NOSPACE(random_key1= random_val1=))"
621AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config ran"],
622[0], [dnl
623${MATCH}
624])
625
626
627#
628# test: _ovs_vsctl_complete_column_optkey_value
629#
630# at first, we should complete on column.
631TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
632MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
633AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
634[0], [dnl
635${MATCH}
636])
637MATCH="$(PREPARE_MATCH_NOSPACE(other_config:))"
638AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other"],
639[0], [dnl
640${MATCH}
641])
642# then, with the ':' we should complete on key.
bb5dbe78 643TMP="$(ovs-vsctl --no-heading --columns=other_config list Bridge br0 | tr -d '{\"}' | tr -s ', ' '\n' | cut -d'=' -f1)"
557570fa
AW
644MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
645AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:"],
646[0], [dnl
647${MATCH}
648])
649# finally, if user fill in some value, we should just complete on user input.
bb5dbe78 650MATCH="$(PREPARE_MATCH_NOSPACE(random_val1))"
557570fa
AW
651AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_val1=12345"],
652[0], [dnl
653${MATCH}
654])
655
656
657#
658# test: _ovs_vsctl_complete_filename
659#
660touch private_key certificate
661MATCH="$(PREPARE_MATCH_SPACE(private_key))"
662AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl priva"],
663[0], [dnl
664${MATCH}
665])
666MATCH="$(PREPARE_MATCH_SPACE(certificate))"
667AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl private_key cer"],
668[0], [dnl
669${MATCH}
670])
671
672
673#
674# test: _ovs_vsctl_complete_target
675#
676MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: ssl: tcp: unix:))"
677AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager "],
678[0], [dnl
679${MATCH}
680])
681# filename completion on unix, punix.
bb5dbe78 682MATCH="$(PREPARE_MATCH_NOSPACE(testsuite.log))"
557570fa
AW
683AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager unix:test"],
684[0], [dnl
685${MATCH}
686])
687# no completion on other type, just return available types.
688# in real environment, bash will not complete on anything.
bb5dbe78 689MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: tcp: unix:))"
557570fa
AW
690AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager ssl:something"],
691[0], [dnl
692${MATCH}
693])
694
695
696#
697# test: _ovs_vsctl_complete_new
698#
699# test 'add-br'
700AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br "],
701[0], [dnl
702--- BEGIN MESSAGE
703Enter a new bridge:
704> ovs-vsctl add-br --- END MESSAGE
705])
706# user input does not change the output.
707AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br"],
708[0], [dnl
709--- BEGIN MESSAGE
710Enter a new bridge:
711> ovs-vsctl add-br new-br--- END MESSAGE
712])
713# after specifying the new bridge name, we should complete on parent bridge.
714TMP="$(ovs-vsctl list-br)"
715MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
716AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br "],
717[0], [dnl
718${MATCH}
719])
720# test 'add-port'
721# after specifying the new port name, we should complete on the column part
722# of '*COLUMN?:KEY=VALUE'.
723TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Port | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
724MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
725AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 new-port "],
726[0], [dnl
727${MATCH}
728])
729
730
731#
732# test: _ovs_vsctl_complete_dashdash
733#
734# after '--', there should be no global options available for completion.
735TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')"
736MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
737AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "init -- "],
738[0], [dnl
739${MATCH}
740])
741TMP="$(ovs-vsctl --no-heading --columns=name,_uuid list Port | tr -d '\"')"
742MATCH="$(PREPARE_MATCH_SPACE(${TMP} newp1 newp2))"
743AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 newp1 -- add-port br1 newp2 -- set Port "],
744[0], [dnl
745${MATCH}
746])
747
748OVS_VSWITCHD_STOP
749AT_CLEANUP
750
751
752AT_SETUP([vsctl-bashcomp - negative test])
622aff96
YT
753AT_SKIP_IF([test -z ${BASH_VERSION+x}])
754AT_SKIP_IF([eval 'test ${BASH_VERSINFO[[0]]} -lt 4'])
557570fa
AW
755OVS_VSWITCHD_START
756
757# complete non-matching command.
758AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid"],
759[0], [dnl
760
761])
762
763# complete after invalid command.
764AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid argu"],
765[0], [dnl
766
767])
768
769# complete non-matching end argument.
770AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_"],
771[0], [dnl
772
773])
774
775# complete after invalid intermediate argument.
776AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_TBL "],
777[1], [dnl
778--- BEGIN MESSAGE
779Cannot complete 'INVALID_TBL' at index 3:
780> ovs-vsctl set INVALID_TBL --- END MESSAGE])
781
782# complete ovs-vsctl --db=wrongdb [TAB]
783# should return 1 and show nothing.
784AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=wrongdb"],
785[1], [])
786
787OVS_VSWITCHD_STOP
788# delete ovsdb-server and try again.
789AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
790[1], [])
791
622aff96 792AT_CLEANUP