AT_TESTED([ovs-vswitchd]) AT_TESTED([ovs-vsctl]) AT_TESTED([perl]) m4_include([m4/compat.at]) m4_divert_push([PREPARE_TESTS]) [ ovs_wait () { # First try a quick sleep, so that the test completes very quickly # in the normal case. POSIX doesn't require fractional times to # work, so this might not work. sleep 0.1 ovs_wait_cond && exit 0 # Then wait up to 10 seconds. for d in 0 1 2 3 4 5 6 7 8 9; do sleep 1 ovs_wait_cond && exit 0 done exit 1 } # Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout. seq () { while test $1 -le $2; do echo $1 set `expr $1 + ${3-1}` $2 $3 done } if test "$IS_WIN32" = "yes"; then pwd () { command pwd -W "$@" } diff () { command diff --strip-trailing-cr "$@" } kill () { case "$1" in -0) shift for i in $*; do # tasklist will always have return code 0. # If pid does exist, there will be a line with the pid. if tasklist //fi "PID eq $i" | grep $i >/dev/null; then : else return 1 fi done return 0 ;; -[1-9]*) shift for i in $*; do if tasklist //fi "PID eq $i" | grep $i >/dev/null; then tskill $i fi done ;; [1-9][0-9]*) for i in $*; do if tasklist //fi "PID eq $i" | grep $i >/dev/null; then tskill $i fi done ;; esac } fi ] m4_divert_pop([PREPARE_TESTS]) m4_define([OVS_WAIT], [AT_CHECK( [ovs_wait_cond () { $1 } ovs_wait], [0], [ignore], [ignore], [$2])]) m4_define([OVS_WAIT_UNTIL], [OVS_WAIT([$1], [$2])]) m4_define([OVS_WAIT_WHILE], [OVS_WAIT([if $1; then return 1; else return 0; fi], [$2])]) dnl OVS_APP_EXIT_AND_WAIT(DAEMON) dnl dnl Ask the daemon named DAEMON to exit, via ovs-appctl, and then waits for it dnl to exit. m4_define([OVS_APP_EXIT_AND_WAIT], [ovs-appctl -t $1 exit OVS_WAIT_WHILE([test -e $1.pid])]) m4_define([ON_EXIT__], [trap '. ./cleanup' 0; cat - cleanup << $2 > __cleanup $1 EOF mv __cleanup cleanup ]) dnl ON_EXIT([COMMANDS]) dnl ON_EXIT_UNQUOTED([COMMANDS]) dnl dnl Add the shell COMMANDS to a collection executed when the current test dnl completes, as a cleanup action. (The most common use is to kill a dnl daemon started by the test. This is important to prevent tests that dnl start daemons from hanging at exit.) dnl dnl The only difference between ON_EXIT and ON_EXIT_UNQUOTED is that only the dnl latter performs shell variable (e.g. $var) substitution, command dnl substitution (e.g. `command`), and backslash escaping (e.g. \\ becomes \) dnl in COMMANDS at the time that ON_EXIT_UNQUOTED is encountered. ON_EXIT, dnl in contrast, copies the literal COMMANDS and only executes shell expansion dnl at cleanup time. dnl dnl Cleanup commands are executed in the reverse order of execution of dnl these macros. m4_define([ON_EXIT], [ON_EXIT__([$1], ['EOF'])]) m4_define([ON_EXIT_UNQUOTED], [ON_EXIT__([$1], [EOF])])