]> git.proxmox.com Git - mirror_ovs.git/blame - tests/completion.at
ovn: Add name column to logical switch table.
[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])])
80AT_CHECK([ovs-appctl --target ovs-ofctl exit])
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])
ce34e37f 344AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
557570fa
AW
345OVS_VSWITCHD_START
346
347# complete ovs-vsctl --db=* [TAB]
348TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')
349$(ovs-vsctl --options | grep -- '--' | sed -e 's/=.*$/=/g')"
350MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
351AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=unix:$OVS_RUNDIR/db.sock "],
352[0], [dnl
353${MATCH}
354])
355# complete ovs-vsctl [TAB]
356AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
357[0], [dnl
358${MATCH}
359])
360
361# complete on global options.
362AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run "],
363[0], [dnl
364${MATCH}
365])
366AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run --pretty "],
367[0], [dnl
368${MATCH}
369])
370
371# complete on local options.
372TMP="$(ovs-vsctl --commands | grep -- '--may-exist' | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n' | grep -v -- '--may-exist')"
373MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
374AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--may-exist "],
375[0], [dnl
376${MATCH}
377])
378
379#
380# test !, +, ?, *.
381#
382# test !. no following arguments are expanded.
383TMP="$(ovsdb-client --no-heading list-tables)"
384MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
385AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
386[0], [dnl
387${MATCH}
388])
389# test ?. will show completions for both current and following arguments.
390ovs-vsctl br-set-external-id br0 bridge-id br0
391MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
392AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
393[0], [dnl
394${MATCH}
395])
396# test *. argument with this prefix could be completed for zero or more times.
397TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
398MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
399AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge "],
400[0], [dnl
401${MATCH}
402])
403AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge br0 "],
404[0], [dnl
405${MATCH}
406])
407# test +. the first time, an argument is required, after that, it becomes '*'.
408TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
409MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
410AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
411[0], [dnl
412${MATCH}
413])
414MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
415AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_key=123 "],
416[0], [dnl
417${MATCH}
418])
419
420OVS_VSWITCHD_STOP
421AT_CLEANUP
422
423
424AT_SETUP([vsctl-bashcomp - argument completion])
ce34e37f 425AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
557570fa
AW
426OVS_VSWITCHD_START(
427 [add-br br1 -- \
428 set bridge br1 datapath-type=dummy -- \
429 add-br foo -- \
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 ])
438#
439# test completion functions defined in '_OVS_VSCTL_ARG_COMPLETION_FUNCS'.
440# therein, the different argument prefixes are also tested at the same time.
441#
442# A space is appended to each output if completion is configured without
443# 'nospace' option.
444#
445
446
447#
448# test: _ovs_vsctl_complete_table
449#
450TMP="$(ovsdb-client --no-heading list-tables)"
451MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
452AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
453[0], [dnl
454${MATCH}
455])
456MATCH="$(PREPARE_MATCH_SPACE(Open_vSwitch))"
457AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open"],
458[0], [dnl
459${MATCH}
460])
461
462
463#
464# test: _ovs_vsctl_complete_record
465#
466TMP="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d '\"')"
467MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
468AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open_vSwitch "],
469[0], [dnl
470${MATCH}
471])
472TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
473MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
474AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge "],
475[0], [dnl
476${MATCH}
477])
478
479
480#
481# test: _ovs_vsctl_complete_bridge
482#
483TMP="$(ovs-vsctl list-br)"
484MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
485AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan "],
486[0], [dnl
487${MATCH}
488])
489# this also helps check the '_ovs_vsctl_check_startswith_string'.
490MATCH="$(PREPARE_MATCH_SPACE(--weird-br_name))"
491AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan --"],
492[0], [dnl
493${MATCH}
494])
495
496
497#
498# test: _ovs_vsctl_complete_port
499#
500TMP="$(ovs-vsctl --no-heading --columns=name list Port | tr -d '\"')"
501MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
502AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "port-to-br "],
503[0], [dnl
504${MATCH}
505])
506# complete on ports in particular bridge.
507TMP="$(ovs-vsctl list-ports br0)"
508MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
509AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "del-port br0 "],
510[0], [dnl
511${MATCH}
512])
513
514
515#
516# test: _ovs_vsctl_complete_iface
517#
518for br in `ovs-vsctl list-br`; do
519 TMP="${TMP} $(ovs-vsctl list-ifaces $br)"
520done
521MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
522AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "iface-to-br "],
523[0], [dnl
524${MATCH}
525])
526
527
528#
529# test: _ovs_vsctl_complete_bridge_fail_mode
530#
531MATCH="$(PREPARE_MATCH_SPACE(standalone secure))"
532AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-fail-mode br0 "],
533[0], [dnl
534${MATCH}
535])
536
537
538#
539# test: _ovs_vsctl_complete_key
540#
541AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
542[0], [dnl
543
544])
545# since there is no key added yet, we will only get our own input.
546MATCH="$(PREPARE_MATCH_SPACE(test_key))"
547AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 test_key"],
548[0], [dnl
549${MATCH}
550])
551# now add a key, as we should see it.
552ovs-vsctl br-set-external-id br0 bridge-id br0
553MATCH="$(PREPARE_MATCH_SPACE(bridge-id))"
554AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
555[0], [dnl
556${MATCH}
557])
558MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
559AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
560[0], [dnl
561${MATCH}
562])
563
564
565#
566# test: _ovs_vsctl_complete_value
567#
568# should just return the user input.
569MATCH="$(PREPARE_MATCH_SPACE(test_value --))"
570AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 bridge-id test_value"],
571[0], [dnl
572${MATCH}
573])
574
575
576#
577# test: _ovs_vsctl_complete_column
578#
579TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Open_vSwitch | tr -d ':' | cut -d' ' -f1)"
580UUID="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d ' ')"
581MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
582AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Open_vSwitch $UUID "],
583[0], [dnl
584${MATCH}
585])
586TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | tr -d ':' | cut -d' ' -f1)"
587MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
588AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 "],
589[0], [dnl
590${MATCH}
591])
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 '--'.
595MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
596AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 other_config "],
597[0], [dnl
598${MATCH}
599])
600
601
602#
603# test: _ovs_vsctl_complete_key_value
604#
605# with no key available, should always get user input.
606MATCH="$(PREPARE_MATCH_NOSPACE(random_key))"
607AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key"],
608[0], [dnl
609${MATCH}
610])
611MATCH="$(PREPARE_MATCH_NOSPACE(random_key=abc))"
612AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key=abc"],
613[0], [dnl
614${MATCH}
615])
616# now add two random keys.
617ovs-vsctl set Bridge br0 other_config:random_key1=abc other_config:random_val1=xyz
618MATCH="$(PREPARE_MATCH_NOSPACE(random_key1= random_val1=))"
619AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config ran"],
620[0], [dnl
621${MATCH}
622])
623
624
625#
626# test: _ovs_vsctl_complete_column_optkey_value
627#
628# at first, we should complete on column.
629TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
630MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
631AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
632[0], [dnl
633${MATCH}
634])
635MATCH="$(PREPARE_MATCH_NOSPACE(other_config:))"
636AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other"],
637[0], [dnl
638${MATCH}
639])
640# then, with the ':' we should complete on key.
641TMP="$(ovs-vsctl --no-heading --columns=other_config list Bridge br0 | tr -d '{\"}' | tr -s ', ' '\n' | cut -d'=' -f1 | xargs printf "other_config:%s\n")"
642MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
643AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:"],
644[0], [dnl
645${MATCH}
646])
647# finally, if user fill in some value, we should just complete on user input.
648MATCH="$(PREPARE_MATCH_NOSPACE(other_config:random_val1=12345))"
649AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_val1=12345"],
650[0], [dnl
651${MATCH}
652])
653
654
655#
656# test: _ovs_vsctl_complete_filename
657#
658touch private_key certificate
659MATCH="$(PREPARE_MATCH_SPACE(private_key))"
660AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl priva"],
661[0], [dnl
662${MATCH}
663])
664MATCH="$(PREPARE_MATCH_SPACE(certificate))"
665AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl private_key cer"],
666[0], [dnl
667${MATCH}
668])
669
670
671#
672# test: _ovs_vsctl_complete_target
673#
674MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: ssl: tcp: unix:))"
675AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager "],
676[0], [dnl
677${MATCH}
678])
679# filename completion on unix, punix.
680MATCH="$(PREPARE_MATCH_NOSPACE(unix:testsuite.log))"
681AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager unix:test"],
682[0], [dnl
683${MATCH}
684])
685# no completion on other type, just return available types.
686# in real environment, bash will not complete on anything.
687MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: ssl: tcp: unix:))"
688AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager ssl:something"],
689[0], [dnl
690${MATCH}
691])
692
693
694#
695# test: _ovs_vsctl_complete_new
696#
697# test 'add-br'
698AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br "],
699[0], [dnl
700--- BEGIN MESSAGE
701Enter a new bridge:
702> ovs-vsctl add-br --- END MESSAGE
703])
704# user input does not change the output.
705AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br"],
706[0], [dnl
707--- BEGIN MESSAGE
708Enter a new bridge:
709> ovs-vsctl add-br new-br--- END MESSAGE
710])
711# after specifying the new bridge name, we should complete on parent bridge.
712TMP="$(ovs-vsctl list-br)"
713MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
714AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br "],
715[0], [dnl
716${MATCH}
717])
718# test 'add-port'
719# after specifying the new port name, we should complete on the column part
720# of '*COLUMN?:KEY=VALUE'.
721TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Port | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
722MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
723AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 new-port "],
724[0], [dnl
725${MATCH}
726])
727
728
729#
730# test: _ovs_vsctl_complete_dashdash
731#
732# after '--', there should be no global options available for completion.
733TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')"
734MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
735AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "init -- "],
736[0], [dnl
737${MATCH}
738])
739TMP="$(ovs-vsctl --no-heading --columns=name,_uuid list Port | tr -d '\"')"
740MATCH="$(PREPARE_MATCH_SPACE(${TMP} newp1 newp2))"
741AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 newp1 -- add-port br1 newp2 -- set Port "],
742[0], [dnl
743${MATCH}
744])
745
746OVS_VSWITCHD_STOP
747AT_CLEANUP
748
749
750AT_SETUP([vsctl-bashcomp - negative test])
ce34e37f 751AT_SKIP_IF([test -z ${BASH_VERSION+x} || test ${BASH_VERSINFO[[0]]} -lt 4])
557570fa
AW
752OVS_VSWITCHD_START
753
754# complete non-matching command.
755AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid"],
756[0], [dnl
757
758])
759
760# complete after invalid command.
761AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid argu"],
762[0], [dnl
763
764])
765
766# complete non-matching end argument.
767AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_"],
768[0], [dnl
769
770])
771
772# complete after invalid intermediate argument.
773AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_TBL "],
774[1], [dnl
775--- BEGIN MESSAGE
776Cannot complete 'INVALID_TBL' at index 3:
777> ovs-vsctl set INVALID_TBL --- END MESSAGE])
778
779# complete ovs-vsctl --db=wrongdb [TAB]
780# should return 1 and show nothing.
781AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=wrongdb"],
782[1], [])
783
784OVS_VSWITCHD_STOP
785# delete ovsdb-server and try again.
786AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
787[1], [])
788
08d42548 789AT_CLEANUP