1 AT_BANNER([appctl bashcomp unit tests])
3 m4_define([GET_FORMAT], [
4 echo "$@" | grep -A 1 -- "Command format" | tail -n+2
7 m4_define([GET_EXPAN], [
8 echo "$@" | grep -- "available completions for keyword" \
9 | sed -e 's/^[ ]*//g;s/[ ]*$//g'
12 m4_define([GET_AVAIL], [
13 echo "$@" | sed -e '1,/Available/d' | tail -n+2
16 m4_define([GET_COMP_STR], [
17 echo "available completions for keyword \"$1\": $2" \
21 AT_SETUP([appctl-bashcomp - basic verification])
22 AT_SKIP_IF([test -z ${BASH_VERSION+x}])
25 # complete ovs-appctl [TAB]
26 # complete ovs-dpctl [TAB]
27 # complete ovs-ofctl [TAB]
28 # complete ovsdb-tool [TAB]
36 INPUT="$(bash ovs-appctl-bashcomp.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})],
45 # complete ovs-appctl --tar[TAB]
46 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --tar 2>&1)"
47 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
53 # complete ovs-appctl --target [TAB]
54 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl --target TAB 2>&1)"
55 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
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])
73 INPUT="$(bash ovs-appctl-bashcomp.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})],
80 AT_CHECK([ovs-appctl --target ovs-ofctl exit])
85 # complex completion check - bfd/set-forwarding
86 # bfd/set-forwarding [interface] normal|false|true
87 # test expansion of 'interface'
88 AT_SETUP([appctl-bashcomp - 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)
92 # check the top level completion.
93 INPUT="$(bash ovs-appctl-bashcomp.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})],
102 # check the available completions.
103 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
109 # set argument to 'true', there should be no more completions.
110 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding true TAB 2>&1)"
111 AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
116 # set argument to 'p1', there should still be the completion for booleans.
117 INPUT="$(bash ovs-appctl-bashcomp.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})],
125 # check the available completions.
126 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
129 # set argument to 'p1 false', there should still no more completions.
130 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl bfd/set-forwarding p1 false TAB 2>&1)"
131 AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
139 # complex completion check - lacp/show
141 # test expansion on 'port'
142 AT_SETUP([appctl-bashcomp - 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)
147 # check the top level completion.
148 INPUT="$(bash ovs-appctl-bashcomp.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})],
154 # check the available completions.
155 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
163 # set argument to 'p1', there should be no more completions.
164 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl lacp/show p1 TAB 2>&1)"
165 AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
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([appctl-bashcomp - 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)
181 # check the top level completion.
182 INPUT="$(bash ovs-appctl-bashcomp.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})],
190 # check the available completions.
191 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
198 # set argument to 'ovs-dummy', should go to the dp-name path.
199 INPUT="$(bash ovs-appctl-bashcomp.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})],
205 # check the available completions.
206 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
209 # set odp_flow to some random string, should go to the next level.
210 INPUT="$(bash ovs-appctl-bashcomp.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})],
217 # check the available completions.
218 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
224 # set packet to some random string, there should be no more completions.
225 INPUT="$(bash ovs-appctl-bashcomp.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'],
231 # set argument to 'br0', should go to the bridge path.
232 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl ofproto/trace br0 TAB 2>&1)"
233 MATCH="$(GET_COMP_STR([br_flow], []))"
234 AT_CHECK_UNQUOTED([GET_EXPAN(${INPUT})],
238 # check the available completions.
239 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
242 # set argument to some random string, should go to the odp_flow path.
243 INPUT="$(bash ovs-appctl-bashcomp.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})],
250 # check the available completions.
251 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})],
260 # complex completion check - vlog/set
261 # vlog/set {spec | PATTERN:destination:pattern}
262 # test non expandable arguments
263 AT_SETUP([appctl-bashcomp - complex completion check 4])
264 AT_SKIP_IF([test -z ${BASH_VERSION+x}])
267 # check the top level completion.
268 INPUT="$(bash ovs-appctl-bashcomp.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})],
275 # check the available completions.
276 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
279 # set argument to random 'abcd', there should be no more completions.
280 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovs-appctl vlog/set abcd TAB 2>&1)"
281 AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e '/./,$!d'],
289 AT_SETUP([appctl-bashcomp - negative test])
290 AT_SKIP_IF([test -z ${BASH_VERSION+x}])
291 OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy)
293 # negative test - incorrect subcommand
294 INPUT="$(bash ovs-appctl-bashcomp.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-appctl-bashcomp.bash debug ovs-appctl ERROR TAB 2>&1)"
297 AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d'],
302 # negative test - no ovs-vswitchd
303 # negative test - no ovsdb-server
304 # negative test - no ovs-ofctl
305 # should not see any error.
313 INPUT="$(bash ovs-appctl-bashcomp.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})],
319 INPUT="$(bash ovs-appctl-bashcomp.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'],
325 # negative test - do not match on nested option
326 INPUT="$(bash ovs-appctl-bashcomp.bash debug ovsdb-tool create TAB 2>&1)"
327 AT_CHECK_UNQUOTED([GET_AVAIL(${INPUT})], [0])
332 dnl ----------------------------------------------------------------------
333 AT_BANNER([vsctl bashcomp unit tests])
335 m4_define([PREPARE_MATCH_NOSPACE], [
336 echo "$@" | tr ' ' '\n' | sed -e '/^$/d' | sort -u
339 m4_define([PREPARE_MATCH_SPACE], [
340 echo "$@" | tr ' ' '\n' | sed -e '/^$/d' | sed -e 's/$/ /g' | sort -u
343 AT_SETUP([vsctl-bashcomp - basic verification])
344 AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
347 # complete ovs-vsctl --db=* [TAB]
348 TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')
349 $(ovs-vsctl --options | grep -- '--' | sed -e 's/=.*$/=/g')"
350 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
351 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=unix:$OVS_RUNDIR/db.sock "],
355 # complete ovs-vsctl [TAB]
356 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
361 # complete on global options.
362 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run "],
366 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run --pretty "],
371 # complete on local options.
372 TMP="$(ovs-vsctl --commands | grep -- '--may-exist' | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n' | grep -v -- '--may-exist')"
373 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
374 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--may-exist "],
382 # test !. no following arguments are expanded.
383 TMP="$(ovsdb-client --no-heading list-tables)"
384 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
385 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
389 # test ?. will show completions for both current and following arguments.
390 ovs-vsctl br-set-external-id br0 bridge-id br0
391 MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
392 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
396 # test *. argument with this prefix could be completed for zero or more times.
397 TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
398 MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
399 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge "],
403 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge br0 "],
407 # test +. the first time, an argument is required, after that, it becomes '*'.
408 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
409 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
410 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
414 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
415 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_key=123 "],
424 AT_SETUP([vsctl-bashcomp - argument completion])
425 AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
428 set bridge br1 datapath-type=dummy -- \
430 set bridge foo datapath-type=dummy -- \
431 add-br --weird-br_name -- \
432 set bridge --weird-br_name datapath-type=dummy -- \
433 add-port br0 br0p0 -- set Interface br0p0 type=dummy -- \
434 add-port br0 br0p1 -- set Interface br0p1 type=dummy -- \
435 add-port br1 br1p0 -- set Interface br1p0 type=dummy -- \
436 add-port br1 br1p1 -- set Interface br1p1 type=dummy -- \
437 add-port foo bar -- set Interface bar type=dummy ])
439 # test completion functions defined in '_OVS_VSCTL_ARG_COMPLETION_FUNCS'.
440 # therein, the different argument prefixes are also tested at the same time.
442 # A space is appended to each output if completion is configured without
448 # test: _ovs_vsctl_complete_table
450 TMP="$(ovsdb-client --no-heading list-tables)"
451 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
452 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
456 MATCH="$(PREPARE_MATCH_SPACE(Open_vSwitch))"
457 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open"],
464 # test: _ovs_vsctl_complete_record
466 TMP="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d '\"')"
467 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
468 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open_vSwitch "],
472 TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
473 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
474 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge "],
481 # test: _ovs_vsctl_complete_bridge
483 TMP="$(ovs-vsctl list-br)"
484 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
485 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan "],
489 # this also helps check the '_ovs_vsctl_check_startswith_string'.
490 MATCH="$(PREPARE_MATCH_SPACE(--weird-br_name))"
491 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan --"],
498 # test: _ovs_vsctl_complete_port
500 TMP="$(ovs-vsctl --no-heading --columns=name list Port | tr -d '\"')"
501 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
502 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "port-to-br "],
506 # complete on ports in particular bridge.
507 TMP="$(ovs-vsctl list-ports br0)"
508 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
509 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "del-port br0 "],
516 # test: _ovs_vsctl_complete_iface
518 for br in `ovs-vsctl list-br`; do
519 TMP="${TMP} $(ovs-vsctl list-ifaces $br)"
521 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
522 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "iface-to-br "],
529 # test: _ovs_vsctl_complete_bridge_fail_mode
531 MATCH="$(PREPARE_MATCH_SPACE(standalone secure))"
532 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-fail-mode br0 "],
539 # test: _ovs_vsctl_complete_key
541 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
545 # since there is no key added yet, we will only get our own input.
546 MATCH="$(PREPARE_MATCH_SPACE(test_key))"
547 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 test_key"],
551 # now add a key, as we should see it.
552 ovs-vsctl br-set-external-id br0 bridge-id br0
553 MATCH="$(PREPARE_MATCH_SPACE(bridge-id))"
554 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
558 MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
559 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
566 # test: _ovs_vsctl_complete_value
568 # should just return the user input.
569 MATCH="$(PREPARE_MATCH_SPACE(test_value --))"
570 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 bridge-id test_value"],
577 # test: _ovs_vsctl_complete_column
579 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Open_vSwitch | tr -d ':' | cut -d' ' -f1)"
580 UUID="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d ' ')"
581 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
582 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Open_vSwitch $UUID "],
586 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | tr -d ':' | cut -d' ' -f1)"
587 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
588 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 "],
592 # the 'clear' command requires one or more (+) COLUMN.
593 # so, with one specified COLUMN 'other_config', it should still complete on
594 # COLUMNs, plus '--'.
595 MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
596 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 other_config "],
603 # test: _ovs_vsctl_complete_key_value
605 # with no key available, should always get user input.
606 MATCH="$(PREPARE_MATCH_NOSPACE(random_key))"
607 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key"],
611 MATCH="$(PREPARE_MATCH_NOSPACE(abc))"
612 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key=abc"],
616 # now add two random keys.
617 ovs-vsctl set Bridge br0 other_config:random_key1=abc other_config:random_val1=xyz
618 MATCH="$(PREPARE_MATCH_NOSPACE(random_key1= random_val1=))"
619 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config ran"],
626 # test: _ovs_vsctl_complete_column_optkey_value
628 # at first, we should complete on column.
629 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
630 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
631 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
635 MATCH="$(PREPARE_MATCH_NOSPACE(other_config:))"
636 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other"],
640 # then, with the ':' we should complete on key.
641 TMP="$(ovs-vsctl --no-heading --columns=other_config list Bridge br0 | tr -d '{\"}' | tr -s ', ' '\n' | cut -d'=' -f1)"
642 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
643 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:"],
647 # finally, if user fill in some value, we should just complete on user input.
648 MATCH="$(PREPARE_MATCH_NOSPACE(random_val1))"
649 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_val1=12345"],
656 # test: _ovs_vsctl_complete_filename
658 touch private_key certificate
659 MATCH="$(PREPARE_MATCH_SPACE(private_key))"
660 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl priva"],
664 MATCH="$(PREPARE_MATCH_SPACE(certificate))"
665 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl private_key cer"],
672 # test: _ovs_vsctl_complete_target
674 MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: ssl: tcp: unix:))"
675 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager "],
679 # filename completion on unix, punix.
680 MATCH="$(PREPARE_MATCH_NOSPACE(testsuite.log))"
681 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager unix:test"],
685 # no completion on other type, just return available types.
686 # in real environment, bash will not complete on anything.
687 MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: tcp: unix:))"
688 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager ssl:something"],
695 # test: _ovs_vsctl_complete_new
698 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br "],
702 > ovs-vsctl add-br --- END MESSAGE
704 # user input does not change the output.
705 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br"],
709 > ovs-vsctl add-br new-br--- END MESSAGE
711 # after specifying the new bridge name, we should complete on parent bridge.
712 TMP="$(ovs-vsctl list-br)"
713 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
714 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br "],
719 # after specifying the new port name, we should complete on the column part
720 # of '*COLUMN?:KEY=VALUE'.
721 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Port | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
722 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
723 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 new-port "],
730 # test: _ovs_vsctl_complete_dashdash
732 # after '--', there should be no global options available for completion.
733 TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')"
734 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
735 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "init -- "],
739 TMP="$(ovs-vsctl --no-heading --columns=name,_uuid list Port | tr -d '\"')"
740 MATCH="$(PREPARE_MATCH_SPACE(${TMP} newp1 newp2))"
741 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 newp1 -- add-port br1 newp2 -- set Port "],
750 AT_SETUP([vsctl-bashcomp - negative test])
751 AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
754 # complete non-matching command.
755 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid"],
760 # complete after invalid command.
761 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid argu"],
766 # complete non-matching end argument.
767 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_"],
772 # complete after invalid intermediate argument.
773 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_TBL "],
776 Cannot complete 'INVALID_TBL' at index 3:
777 > ovs-vsctl set INVALID_TBL --- END MESSAGE])
779 # complete ovs-vsctl --db=wrongdb [TAB]
780 # should return 1 and show nothing.
781 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=wrongdb"],
785 # delete ovsdb-server and try again.
786 AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],