2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-15 14:17:18 +00:00
Files
openvswitch/tests/unixctl-py.at
Ben Pfaff 0b7140bbc5 tests: New m4 macro ON_EXIT to add a cleanup action.
Several of the tests start daemons and then need to make sure that the
daemons get killed when the test completes, even if it completes in the
middle due to an early failure.  Until now, they have been using manual
shell "trap" calls to do this.  This works well enough for simple cases,
but sometimes multiple macros start daemons in a single test, and then
each "trap" has to be carefully written to kill off the daemons for the
previously invoked macros.

This commit introduces a new macro ON_EXIT whose use is composable: each
call appends a new action to the ones already specified.

Signed-off-by: Ben Pfaff <blp@nicira.com>
2012-08-20 12:28:05 -07:00

169 lines
5.2 KiB
Plaintext

AT_BANNER([unixctl])
m4_define([APPCTL], [ovs-appctl --timeout 20])
m4_define([PYAPPCTL], [$PYTHON $srcdir/appctl.py --timeout 20])
AT_SETUP([unixctl ovs-vswitchd exit - Python])
AT_SKIP_IF([test $HAVE_PYTHON = no])
OVS_VSWITCHD_START
AT_CHECK([PYAPPCTL -t ovs-vswitchd exit], [0], [])
OVS_WAIT_WHILE([test -s ovs-vswitchd.pid])
AT_CHECK([PYAPPCTL -t ovsdb-server exit], [0], [])
OVS_WAIT_WHILE([test -s ovsdb-server.pid])
AT_CLEANUP
AT_SETUP([unixctl ovs-vswitchd help - Python])
AT_SKIP_IF([test $HAVE_PYTHON = no])
OVS_VSWITCHD_START
AT_CHECK([APPCTL help], [0], [stdout])
AT_CHECK([head -1 stdout], [0], [dnl
The available commands are:
])
mv stdout expout
AT_CHECK([PYAPPCTL help], [0], [expout])
OVS_VSWITCHD_STOP
AT_CLEANUP
AT_SETUP([unixctl ovs-vswitchd arguments - Python])
AT_SKIP_IF([test $HAVE_PYTHON = no])
OVS_VSWITCHD_START
AT_CHECK([APPCTL bond/hash], [2], [], [stderr])
AT_CHECK([head -1 stderr], [0], [dnl
"bond/hash" command requires at least 1 arguments
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL bond/hash], [2], [], [experr])
AT_CHECK([APPCTL bond/hash mac], [2], [], [stderr])
AT_CHECK([head -1 stderr], [0], [dnl
invalid mac
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL bond/hash mac], [2], [], [experr])
AT_CHECK([APPCTL bond/hash mac vlan], [2], [], [stderr])
AT_CHECK([head -1 stderr], [0], [dnl
invalid vlan
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL bond/hash mac vlan], [2], [], [experr])
AT_CHECK([APPCTL bond/hash mac vlan basis], [2], [], [stderr])
AT_CHECK([head -1 stderr], [0], [dnl
invalid vlan
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL bond/hash vlan basis], [2], [], [experr])
AT_CHECK([APPCTL bond/hash mac vlan basis extra], [2], [], [stderr])
AT_CHECK([head -1 stderr], [0], [dnl
"bond/hash" command takes at most 3 arguments
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL bond/hash mac vlan basis extra], [2], [], [experr])
OVS_VSWITCHD_STOP
AT_CLEANUP
AT_SETUP([unixctl bad target - Python])
OVS_RUNDIR=`pwd`; export OVS_RUNDIR
OVS_DBDIR=`pwd`; export OVS_DBDIR
AT_SKIP_IF([test $HAVE_PYTHON = no])
AT_CHECK([PYAPPCTL -t bogus doit], [1], [], [stderr])
AT_CHECK_UNQUOTED([tail -1 stderr], [0], [dnl
appctl.py: cannot read pidfile "`pwd`/bogus.pid" (No such file or directory)
])
AT_CHECK([PYAPPCTL -t /bogus/path.pid doit], [1], [], [stderr])
AT_CHECK([tail -1 stderr], [0], [dnl
appctl.py: cannot connect to "/bogus/path.pid" (No such file or directory)
])
AT_CLEANUP
AT_SETUP([unixctl server - Python])
AT_SKIP_IF([test $HAVE_PYTHON = no])
OVS_RUNDIR=`pwd`; export OVS_RUNDIR
OVS_LOGDIR=`pwd`; export OVS_LOGDIR
OVS_DBDIR=`pwd`; export OVS_DBDIR
OVS_SYSCONFDIR=`pwd`; export OVS_SYSCONFDIR
ON_EXIT([kill `cat test-unixctl.py.pid`])
AT_CAPTURE_FILE([`pwd`/test-unixctl.py.log])
AT_CHECK([$PYTHON $srcdir/test-unixctl.py --log-file --pidfile --detach])
AT_CHECK([APPCTL -t test-unixctl.py help], [0], [stdout])
AT_CHECK([cat stdout], [0], [dnl
The available commands are:
block
echo [[arg ...]]
echo_error [[arg ...]]
exit
help
log [[arg ...]]
version
vlog/list
vlog/reopen
vlog/set spec
])
mv stdout expout
AT_CHECK([PYAPPCTL -t test-unixctl.py help], [0], [expout])
AT_CHECK([ovs-vsctl --version | sed 's/ovs-vsctl/test-unixctl.py/' | head -1 > expout])
AT_CHECK([APPCTL -t test-unixctl.py version], [0], [expout])
AT_CHECK([PYAPPCTL -t test-unixctl.py version], [0], [expout])
AT_CHECK([APPCTL -t test-unixctl.py echo robot ninja], [0], [stdout])
AT_CHECK([cat stdout], [0], [dnl
[[u'robot', u'ninja']]
])
mv stdout expout
AT_CHECK([PYAPPCTL -t test-unixctl.py echo robot ninja], [0], [expout])
AT_CHECK([APPCTL -t test-unixctl.py echo_error robot ninja], [2], [], [stderr])
AT_CHECK([cat stderr], [0], [dnl
[[u'robot', u'ninja']]
ovs-appctl: test-unixctl.py: server returned an error
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL -t test-unixctl.py echo_error robot ninja], [2], [], [experr])
AT_CHECK([APPCTL -t test-unixctl.py echo], [2], [], [stderr])
AT_CHECK([cat stderr], [0], [dnl
"echo" command requires at least 1 arguments
ovs-appctl: test-unixctl.py: server returned an error
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL -t test-unixctl.py echo], [2], [], [experr])
AT_CHECK([APPCTL -t test-unixctl.py echo robot ninja pirates], [2], [], [stderr])
AT_CHECK([cat stderr], [0], [dnl
"echo" command takes at most 2 arguments
ovs-appctl: test-unixctl.py: server returned an error
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL -t test-unixctl.py echo robot ninja pirates], [2], [], [experr])
AT_CHECK([APPCTL -t test-unixctl.py bogus], [2], [], [stderr])
AT_CHECK([cat stderr], [0], [dnl
"bogus" is not a valid command
ovs-appctl: test-unixctl.py: server returned an error
])
sed 's/ovs-appctl/appctl.py/' stderr > experr
AT_CHECK([PYAPPCTL -t test-unixctl.py bogus], [2], [], [experr])
AT_CHECK([APPCTL -t test-unixctl.py exit])
AT_CLEANUP
AT_SETUP([unixctl server errors - Python])
AT_SKIP_IF([test $HAVE_PYTHON = no])
AT_CHECK($PYTHON $srcdir/test-unixctl.py --unixctl "`pwd`"/bogus/path, [1], [], [ignore])
AT_CLEANUP