[ovs-dev] [PATCH V2] ovs-command-completion: Autotest integration.
Alex Wang
alexw at nicira.com
Thu Jan 1 00:47:58 UTC 2015
This commit integrates the unit tests defined in
utilities/ovs-command-compgen-test.bash into 'make check'.
The tests will be skipped if the current shell is not bash.
Signed-off-by: Alex Wang <alexw at nicira.com>
---
PATCH->V2
- use $BASH_VERSION to check if currently running under bash.
- convert m4 macros to bash functions.
- use shell's for statement.
---
Makefile.am | 1 +
tests/automake.mk | 1 +
tests/completion.at | 323 +++++++++++++++
tests/testsuite.at | 1 +
utilities/automake.mk | 3 +-
utilities/ovs-command-compgen-test.bash | 688 -------------------------------
6 files changed, 328 insertions(+), 689 deletions(-)
create mode 100644 tests/completion.at
delete mode 100755 utilities/ovs-command-compgen-test.bash
diff --git a/Makefile.am b/Makefile.am
index 46e8610..1e4cdfb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -132,6 +132,7 @@ scripts_SCRIPTS =
scripts_DATA =
SUFFIXES =
check_DATA =
+check_SCRIPTS =
pkgconfig_DATA =
scriptsdir = $(pkgdatadir)/scripts
diff --git a/tests/automake.mk b/tests/automake.mk
index 33502bc..4b79330 100644
--- a/tests/automake.mk
+++ b/tests/automake.mk
@@ -6,6 +6,7 @@ EXTRA_DIST += \
$(srcdir)/tests/testsuite
TESTSUITE_AT = \
tests/testsuite.at \
+ tests/completion.at \
tests/ovsdb-macros.at \
tests/library.at \
tests/heap.at \
diff --git a/tests/completion.at b/tests/completion.at
new file mode 100644
index 0000000..1ec7f6c
--- /dev/null
+++ b/tests/completion.at
@@ -0,0 +1,323 @@
+AT_BANNER([command completion unit tests - bash])
+
+get_format() {
+ grep -A 1 -- "Command format" <<< "$@" | tail -n+2
+}
+
+get_expand() {
+ grep -- "available completions for keyword" <<< "$@" \
+ | sed -e 's/^[ ]*//g;s/[ ]*$//g'
+}
+
+get_available() {
+ sed -e '1,/Available/d' <<< "$@" | tail -n+2
+}
+
+get_comp_str() {
+ echo "available completions for keyword \"$1\": $2" \
+ | sed -e 's/[ ]*$//g'
+}
+
+AT_SETUP([bash completion - basic verification])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START
+
+# complete ovs-appctl [TAB]
+# complete ovs-dpctl [TAB]
+# complete ovs-ofctl [TAB]
+# complete ovsdb-tool [TAB]
+TEST_CMDS=(ovs-appctl ovs-ofctl ovs-dpctl ovsdb-tool)
+for test_cmd in ${TEST_COMMANDS[@]}; do
+ INPUT="$(bash ovs-command-compgen.bash debug $test_cmd TAB 2>&1)"
+ MATCH="$($test_cmd --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)
+$(test_command list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)"
+
+ AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+${MATCH}
+])
+done
+
+
+# complete ovs-appctl --tar[TAB]
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --tar 2>&1)"
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+--target
+])
+
+
+# complete ovs-appctl --target [TAB]
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target TAB 2>&1)"
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+ovs-ofctl
+ovs-vswitchd
+ovsdb-server
+])
+
+
+# complete ovs-appctl --target ovs-vswitchd [TAB]
+# complete ovs-appctl --target ovsdb-server [TAB]
+# complete ovs-appctl --target ovs-ofctl [TAB]
+AT_CHECK([ovs-ofctl monitor br0 --detach --no-chdir --pidfile])
+TEST_APPCTL_TARGETS=(ovs-vswitchd ovsdb-server ovs-ofctl)
+for target in ${TEST_APPCTL_TARGETS[@]}; do
+ INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target $target TAB 2>&1)"
+ MATCH="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)
+$(ovs-appctl --target $target list-commands | tail -n+2 | cut -c3- | cut -d ' ' -f1 | sort)"
+
+ AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+${MATCH}
+])
+done
+AT_CHECK([ovs-appctl --target ovs-ofctl exit])
+
+
+# check all ovs-appctl subcommand formats
+LIST=$(ovs-appctl list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)
+for subcommand in $LIST; do
+ INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl $subcommand TAB 2>&1)"
+ MATCH=$(ovs-appctl list-commands | tail -n+2 | cut -c3- | grep -- "^$subcommand " | tr -s ' ')
+ AT_CHECK_UNQUOTED([get_format "${INPUT}"], [0], [dnl
+${MATCH}
+])
+done
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+
+# complex completion check - bfd/set-forwarding
+# bfd/set-forwarding [interface] normal|false|true
+# test expansion of 'interface'
+AT_SETUP([bash completion - complex completion check 1])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy)
+
+# check the top level completion.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding TAB 2>&1)"
+MATCH="$(get_comp_str "normal")
+$(get_comp_str "false")
+$(get_comp_str "true")
+$(get_comp_str "interface" "p0")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+p0
+])
+
+
+# set argument to 'true', there should be no more completions.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding true TAB 2>&1)"
+AT_CHECK_UNQUOTED([sed -e '/./,$!d' <<< "$INPUT"], [0], [dnl
+Command format:
+bfd/set-forwarding [[interface]] normal|false|true
+])
+
+
+# set argument to 'p1', there should still be the completion for booleans.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 TAB 2>&1)"
+MATCH="$(get_comp_str "normal")
+$(get_comp_str "false")
+$(get_comp_str "true")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0])
+
+
+# set argument to 'p1 false', there should still be no completions.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 false TAB 2>&1)"
+AT_CHECK_UNQUOTED([sed -e '/./,$!d' <<< "$INPUT"], [0], [dnl
+Command format:
+bfd/set-forwarding [[interface]] normal|false|true
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+
+# complex completion check - lacp/show
+# lacp/show [port]
+# test expansion on 'port'
+AT_SETUP([bash completion - complex completion check 2])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy \
+ -- add-port br0 p1 -- set Interface p1 type=dummy)
+
+# check the top level completion.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show TAB 2>&1)"
+MATCH="$(get_comp_str "port" "br0 p0 p1")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+br0
+p0
+p1
+])
+
+
+# set argument to 'p1', there should be no more completions.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show p1 TAB 2>&1)"
+AT_CHECK_UNQUOTED([sed -e '/./,$!d' <<< "$INPUT"], [0], [dnl
+Command format:
+lacp/show [[port]]
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+
+# complex completion check - ofproto/trace
+# ofproto/trace {[dp_name] odp_flow | bridge br_flow} [-generate|packet]
+# test expansion on 'dp|dp_name' and 'bridge'
+AT_SETUP([bash completion - complex completion check 3])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy \
+ -- add-port br0 p1 -- set Interface p1 type=dummy)
+
+# check the top level completion.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace TAB 2>&1)"
+MATCH="$(get_comp_str "bridge" "br0")
+$(get_comp_str "odp_flow")
+$(get_comp_str "dp_name" "ovs-dummy")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+br0
+ovs-dummy
+])
+
+
+# set argument to 'ovs-dummy', should go to the dp-name path.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy TAB 2>&1)"
+MATCH="$(get_comp_str "odp_flow")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0])
+
+
+# set odp_flow to some random string, should go to the next level.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" TAB 2>&1)"
+MATCH="$(get_comp_str "-generate" "-generate")
+$(get_comp_str "packet")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}" ], [0], [dnl
+-generate
+])
+
+
+# set packet to some random string, there should be no more completions.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-dummy "in_port(123),mac(),ip,tcp" "ABSJDFLSDJFOIWEQR" TAB 2>&1)"
+AT_CHECK_UNQUOTED([sed -e '/./,$!d' <<< "$INPUT"], [0], [dnl
+Command format:
+ofproto/trace {[[dp_name]] odp_flow | bridge br_flow} [[-generate|packet]]
+])
+
+
+# set argument to 'br0', should go to the bridge path.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace br0 TAB 2>&1)"
+MATCH="$(get_comp_str "br_flow")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0])
+
+
+# set argument to some random string, should go to the odp_flow path.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace "in_port(123),mac(),ip,tcp" TAB 2>&1)"
+MATCH="$(get_comp_str "-generate" "-generate")
+$(get_comp_str "packet")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+-generate
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+
+# complex completion check - vlog/set
+# vlog/set {spec | PATTERN:facility:pattern}
+# test non expandable arguments
+AT_SETUP([bash completion - complex completion check 4])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START
+
+# check the top level completion.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set TAB 2>&1)"
+MATCH="$(get_comp_str "PATTERN:facility:pattern")
+$(get_comp_str "spec")"
+AT_CHECK_UNQUOTED([get_expand "${INPUT}"], [0], [dnl
+${MATCH}
+])
+# check the available completions.
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0])
+
+
+# set argument to random 'abcd', there should be no more completions.
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set abcd TAB 2>&1)"
+AT_CHECK_UNQUOTED([sed -e '/./,$!d' <<< "$INPUT"], [0], [dnl
+Command format:
+vlog/set {spec | PATTERN:facility:pattern}
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP
+
+
+AT_SETUP([bash completion - negative test])
+AT_SKIP_IF([test -z ${BASH_VERSION+x}])
+OVS_VSWITCHD_START(add-port br0 p0 -- set Interface p0 type=dummy)
+
+# negative test - incorrect subcommand
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR 2>&1)"
+AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./,$!d'], [0])
+INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR TAB 2>&1)"
+AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d'],
+[0], [dnl
+Command format:
+])
+
+
+# negative test - no ovs-vswitchd
+# negative test - no ovsdb-server
+# negative test - no ovs-ofctl
+# should not see any error.
+OVS_VSWITCHD_STOP
+
+TEST_APPCTL_TARGETS=(ovs-vswitchd ovsdb-server ovs-ofctl)
+for target in ${TEST_APPCTL_TARGETS[@]}; do
+ INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target $target TAB 2>&1)"
+ MATCH="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)"
+
+ AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0], [dnl
+${MATCH}
+])
+
+ INPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target $target ERROR SUBCMD TAB 2>&1)"
+ AT_CHECK_UNQUOTED([echo "$INPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d'], [0], [dnl
+Command format:
+])
+done
+
+
+# negative test - do not match on nested option
+INPUT="$(bash ovs-command-compgen.bash debug ovsdb-tool create TAB 2>&1)"
+AT_CHECK_UNQUOTED([get_available "${INPUT}"], [0])
+
+AT_CLEANUP
\ No newline at end of file
diff --git a/tests/testsuite.at b/tests/testsuite.at
index 3792328..5f1af6f 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -116,6 +116,7 @@ EOF
m4_include([tests/ovsdb-macros.at])
m4_include([tests/ofproto-macros.at])
+m4_include([tests/completion.at])
m4_include([tests/bfd.at])
m4_include([tests/cfm.at])
m4_include([tests/lacp.at])
diff --git a/utilities/automake.mk b/utilities/automake.mk
index 834be58..450589d 100644
--- a/utilities/automake.mk
+++ b/utilities/automake.mk
@@ -22,13 +22,14 @@ scripts_SCRIPTS += \
utilities/ovs-save
scripts_DATA += utilities/ovs-lib
+check_SCRIPTS += utilities/ovs-command-compgen.bash
+
utilities/ovs-lib: $(top_builddir)/config.status
docs += utilities/ovs-command-compgen.INSTALL.md
EXTRA_DIST += \
utilities/ovs-check-dead-ifs.in \
utilities/ovs-command-compgen.bash \
- utilities/ovs-command-compgen-test.bash \
utilities/ovs-ctl.in \
utilities/ovs-dev.py \
utilities/ovs-docker \
diff --git a/utilities/ovs-command-compgen-test.bash b/utilities/ovs-command-compgen-test.bash
deleted file mode 100755
index 9de0d12..0000000
--- a/utilities/ovs-command-compgen-test.bash
+++ /dev/null
@@ -1,688 +0,0 @@
-#!/bin/bash
-#
-# Tests for the ovs-command-compgen.bash
-#
-# Please run this with ovs-command-compgen.bash script inside
-# ovs-sandbox, under the same directory.
-#
-# For information about running the ovs-sandbox, please refer to
-# the tutorial directory.
-#
-#
-#
-COMP_OUTPUT=
-TMP=
-EXPECT=
-TEST_RESULT=
-
-TEST_COUNTER=0
-TEST_COMMANDS=(ovs-appctl ovs-ofctl ovs-dpctl ovsdb-tool)
-TEST_APPCTL_TARGETS=(ovs-vswitchd ovsdb-server ovs-ofctl)
-
-#
-# Helper functions.
-#
-get_command_format() {
- local input="$@"
-
- echo "$(grep -A 1 "Command format" <<< "$input" | tail -n+2)"
-}
-
-get_argument_expansion() {
- local input="$@"
-
- echo "$(grep -- "available completions for keyword" <<< "$input" | sed -e 's/^[ \t]*//')"
-}
-
-get_available_completions() {
- local input="$@"
-
- echo "$(sed -e '1,/Available/d' <<< "$input" | tail -n+2)"
-}
-
-generate_expect_completions() {
- local keyword="$1"
- local completions="$2"
-
- echo "available completions for keyword \"$keyword\": $completions" \
- | sed -e 's/[ \t]*$//'
-}
-
-reset_globals() {
- COMP_OUTPUT=
- TMP=
- EXPECT=
- TEST_RESULT=
-}
-
-#
-# $1: Test name.
-# $2: ok or fail.
-#
-print_result() {
- (( TEST_COUNTER++ ))
- printf "%2d: %-70s %s\n" "$TEST_COUNTER" "$1" "$2"
-}
-
-#
-# $1: test stage
-# $2: actual
-# $3: expect
-#
-print_error() {
- local stage="$1"
- local actual="$2"
- local expect="$3"
-
- printf "failed at stage_%s:\n" "$stage"
- printf "actual output: %s\n" "$actual"
- printf "expect output: %s\n" "$expect"
-}
-
-#
-# Sub-tests.
-#
-ovs_apptcl_TAB() {
- local target="$1"
- local target_line=
- local comp_output tmp expect
-
- if [ -n "$target" ]; then
- target_line="--target $target"
- fi
- comp_output="$(bash ovs-command-compgen.bash debug ovs-appctl $target_line TAB 2>&1)"
- tmp="$(get_available_completions "$comp_output")"
- expect="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)
-$(ovs-appctl $target_line list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)"
- if [ "$tmp" = "$expect" ]; then
- echo "ok"
- else
- echo "fail"
- fi
-}
-
-#
-# Test preparation.
-#
-ovs-vsctl add-br br0
-ovs-vsctl add-port br0 p1
-
-
-#
-# Begin the test.
-#
-cat <<EOF
-
-## ------------------------------- ##
-## ovs-command-compgen unit tests. ##
-## ------------------------------- ##
-
-EOF
-
-
-# complete ovs-appctl [TAB]
-# complete ovs-dpctl [TAB]
-# complete ovs-ofctl [TAB]
-# complete ovsdb-tool [TAB]
-
-for test_command in ${TEST_COMMANDS[@]}; do
- reset_globals
-
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ${test_command} TAB 2>&1)"
- TMP="$(get_available_completions "$COMP_OUTPUT")"
- EXPECT="$(${test_command} --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)
-$(${test_command} list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)"
- if [ "$TMP" = "$EXPECT" ]; then
- TEST_RESULT=ok
- else
- TEST_RESULT=fail
- fi
-
- print_result "complete ${test_command} [TAB]" "$TEST_RESULT"
-done
-
-
-# complete ovs-appctl --tar[TAB]
-
-reset_globals
-
-COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --tar 2>&1)"
-TMP="$(get_available_completions "$COMP_OUTPUT")"
-EXPECT="--target"
-if [ "$TMP" = "$EXPECT" ]; then
- TEST_RESULT=ok
-else
- TEST_RESULT=fail
-fi
-
-print_result "complete ovs-appctl --targ[TAB]" "$TEST_RESULT"
-
-
-# complete ovs-appctl --target [TAB]
-
-reset_globals
-
-COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target TAB 2>&1)"
-TMP="$(get_available_completions "$COMP_OUTPUT")"
-EXPECT="$(echo ${TEST_APPCTL_TARGETS[@]} | tr ' ' '\n' | sort)"
-if [ "$TMP" = "$EXPECT" ]; then
- TEST_RESULT=ok
-else
- TEST_RESULT=fail
-fi
-
-print_result "complete ovs-appctl --target [TAB]" "$TEST_RESULT"
-
-
-# complete ovs-appctl --target ovs-vswitchd [TAB]
-# complete ovs-appctl --target ovsdb-server [TAB]
-# complete ovs-appctl --target ovs-ofctl [TAB]
-
-reset_globals
-
-for target in ${TEST_APPCTL_TARGETS[@]}; do
- target_field="--target $i "
-
- if [ "$target" = "ovs-ofctl" ]; then
- ovs-ofctl monitor br0 --detach --no-chdir --pidfile
- fi
-
- TEST_RESULT="$(ovs_apptcl_TAB $target)"
-
- print_result "complete ovs-appctl ${target_field}[TAB]" "$TEST_RESULT"
-
- if [ "$target" = "ovs-ofctl" ]; then
- ovs-appctl --target ovs-ofctl exit
- fi
-done
-
-
-# check all subcommand formats
-
-reset_globals
-
-TMP="$(ovs-appctl list-commands | tail -n +2 | cut -c3- | cut -d ' ' -f1 | sort)"
-
-# for each subcmd, check the print of subcmd format
-for i in $TMP; do
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl $i TAB 2>&1)"
- tmp="$(get_command_format "$COMP_OUTPUT")"
- EXPECT="$(ovs-appctl list-commands | tail -n+2 | cut -c3- | grep -- "^$i " | tr -s ' ' | sort)"
- if [ "$tmp" = "$EXPECT" ]; then
- TEST_RESULT=ok
- else
- TEST_RESULT=fail
- break
- fi
-done
-
-print_result "check all subcommand format" "$TEST_RESULT"
-
-
-# complex completion check - bfd/set-forwarding
-# bfd/set-forwarding [interface] normal|false|true
-# test expansion of 'interface'
-
-reset_globals
-
-for i in loop_once; do
- # check the top level completion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "normal" "")
-$(generate_expect_completions "false" "")
-$(generate_expect_completions "true" "")
-$(generate_expect_completions "interface" "p1")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="p1"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'true', there should be no more completions.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding true TAB 2>&1)"
- TMP="$(sed -e '/./,$!d' <<< "$COMP_OUTPUT")"
- EXPECT="Command format:
-bfd/set-forwarding [interface] normal|false|true"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'p1', there should still be the completion for booleans.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "normal" "")
-$(generate_expect_completions "false" "")
-$(generate_expect_completions "true" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "4" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "5" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'p1 false', there should still no more completions.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding p1 false TAB 2>&1)"
- TMP="$(sed -e '/./,$!d' <<< "$COMP_OUTPUT")"
- EXPECT="Command format:
-bfd/set-forwarding [interface] normal|false|true"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "6" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complex completion check - bfd/set-forwarding" "$TEST_RESULT"
-
-
-# complex completion check - lacp/show
-# lacp/show [port]
-# test expansion on 'port'
-
-reset_globals
-
-for i in loop_once; do
- # check the top level completion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "port" "br0 p1")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="br0 p1"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'p1', there should be no more completions.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show p1 TAB 2>&1)"
- TMP="$(sed -e '/./,$!d' <<< "$COMP_OUTPUT")"
- EXPECT="Command format:
-lacp/show [port]"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complex completion check - lacp/show" "$TEST_RESULT"
-
-
-# complex completion check - ofproto/trace
-# ofproto/trace {[dp_name] odp_flow | bridge br_flow} [-generate|packet]
-# test expansion on 'dp|dp_name' and 'bridge'
-
-reset_globals
-
-for i in loop_once; do
- # check the top level completion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "bridge" "br0")
-$(generate_expect_completions "odp_flow" "")
-$(generate_expect_completions "dp_name" "ovs-system")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="br0 ovs-system"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'ovs-system', should go to the dp-name path.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-system TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "odp_flow" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "4" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set odp_flow to some random string, should go to the next level.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-system "in_port(123),mac(),ip,tcp" TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "-generate" "-generate")
-$(generate_expect_completions "packet" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "5" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="-generate"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "6" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set packet to some random string, there should be no more completions.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace ovs-system "in_port(123),mac(),ip,tcp" "ABSJDFLSDJFOIWEQR" TAB 2>&1)"
- TMP="$(sed -e '/./,$!d' <<< "$COMP_OUTPUT")"
- EXPECT="Command format:
-ofproto/trace {[dp_name] odp_flow | bridge br_flow} [-generate|packet]"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "7" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to 'br0', should go to the bridge path.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace br0 TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "br_flow" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "8" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "9" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to some random string, should go to the odp_flow path.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ofproto/trace "in_port(123),mac(),ip,tcp" TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "-generate" "-generate")
-$(generate_expect_completions "packet" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "10" "$TMP" "$EXPEC"T
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="-generate"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "11" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complex completion check - ofproto/trace" "$TEST_RESULT"
-
-
-# complex completion check - vlog/set
-# vlog/set {spec | PATTERN:facility:pattern}
-# test non expandable arguments
-
-reset_globals
-
-for i in loop_once; do
- # check the top level completion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "PATTERN:facility:pattern" "")
-$(generate_expect_completions "spec" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # set argument to random 'abcd', there should be no more completions.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl vlog/set abcd TAB 2>&1)"
- TMP="$(sed -e '/./,$!d' <<< "$COMP_OUTPUT")"
- EXPECT="Command format:
-vlog/set {spec | PATTERN:facility:pattern}"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complex completion check - vlog/set" "$TEST_RESULT"
-
-
-# complete after delete port
-
-reset_globals
-ovs-vsctl del-port p1
-
-for i in loop_once; do
- # check match on interface, there should be no available interface expansion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bfd/set-forwarding TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "normal" "")
-$(generate_expect_completions "false" "")
-$(generate_expect_completions "true" "")
-$(generate_expect_completions "interface" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check match on port, there should be no p1 as port.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl lacp/show TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "port" "br0")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT="br0"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "4" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complete after delete port" "$TEST_RESULT"
-
-
-# complete after delete bridge
-
-reset_globals
-ovs-vsctl del-br br0
-for i in loop_once; do
- # check match on port, there should be no p1 as port.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl bridge/dump-flows TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT="$(generate_expect_completions "bridge" "")"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check the available completions.
- TMP="$(get_available_completions "$COMP_OUTPUT" | tr '\n' ' ' | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- # check 'ovs-ofctl monitor [misslen] [invalid_ttl] [watch:[...]]', should
- # not show any available completion.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-ofctl monitor non_exist_br TAB 2>&1)"
- TMP="$(get_argument_expansion "$COMP_OUTPUT" | sed -e 's/[ \t]*$//')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "3" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "complete after delete bridge" "$TEST_RESULT"
-
-
-# negative test - incorrect subcommand
-
-reset_globals
-
-for i in loop_once; do
- # incorrect subcommand
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR 2>&1)"
- TMP="$(echo "$COMP_OUTPUT" | sed -e 's/[ \t]*$//' | sed -e '/./,$!d')"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "1" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl ERROR TAB 2>&1)"
- TMP="$(echo "$COMP_OUTPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d')"
- EXPECT="Command format:"
- if [ "$TMP" != "$EXPECT" ]; then
- print_error "2" "$TMP" "$EXPECT"
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "negative test - incorrect subcommand" "$TEST_RESULT"
-
-
-# negative test - no ovs-vswitchd
-# negative test - no ovsdb-server
-# negative test - no ovs-ofctl
-# should not see any error.
-
-reset_globals
-killall ovs-vswitchd ovsdb-server
-
-for i in ${TEST_APPCTL_TARGETS[@]}; do
- for j in loop_once; do
- reset_globals
-
- daemon="$i"
-
- # should show no avaiable subcommands.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target $daemon TAB 2>&1)"
- TMP="$(get_available_completions "$COMP_OUTPUT")"
- EXPECT="$(ovs-appctl --option | sort | sed -n '/^--.*/p' | cut -d '=' -f1)"
- if [ "$TMP" != "$EXPECT" ]; then
- TEST_RESULT=fail
- break
- fi
-
- # should not match any input.
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovs-appctl --target $daemon ERROR SUBCMD TAB 2>&1)"
- TMP="$(echo "$COMP_OUTPUT" | sed -e 's/[ \t]*$//' | sed -e '/./!d')"
- EXPECT="Command format:"
- if [ "$TMP" != "$EXPECT" ]; then
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
- done
- print_result "negative test - no $daemon" "$TEST_RESULT"
-done
-
-
-# negative test - do not match on nested option
-
-reset_globals
-
-for i in loop_once; do
- COMP_OUTPUT="$(bash ovs-command-compgen.bash debug ovsdb-tool create TAB 2>&1)"
- TMP="$(get_available_completions "$COMP_OUTPUT")"
- EXPECT=
- if [ "$TMP" != "$EXPECT" ]; then
- TEST_RESULT=fail
- break
- fi
-
- TEST_RESULT=ok
-done
-
-print_result "negative test - do not match on nested option" "$TEST_RESULT"
\ No newline at end of file
--
1.7.9.5
More information about the dev
mailing list